如何在 Razor 页面中正确路由 DropDownList 选择?
How Can I Correctly Route A DropDownList Selection In Razor Pages?
我在我的一个 Razor 页面上使用 SelectList 作为下拉列表,以允许用户选择广告组。当他们单击 'Set Group' 按钮时,它应该会显示该组的成员。当前正在重新加载页面,未选择任何组。
这是我的下拉代码:
<div>
<hr />
<dl class="row">
<dt class="col-sm-2">
AD Group:
</dt>
<dd class="col-sm-10">
<select asp-for="ADGroup" asp-items="Model.ADGroups" onchange=""><option value=""></option></select> <a asp-page="./UpdateADGroup" asp-route-ADGroup="@Model.ADGroup" class="btn btn-outline-info btn-sm">Set Group</a>
</dd>
<dt class="col-sm-2">
Current Members:
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Members)
</dd>
</dl>
</div>
以下是我认为与我的模型相关的部分class:
private readonly RDSTestSiteContext _context;
public UpdateADGroupModel(RDSTestSiteContext context)
{
_context = context;
}
[BindProperty(SupportsGet = true)]
public string ADGroup { get; set; }
public List<SelectListItem> ADGroups = new List<SelectListItem>();
[BindProperty]
public Fileset Fileset { get; set; }
[BindProperty(SupportsGet = true)]
public string Members { get; set; }
public async Task<IActionResult> OnGetAsync(long? id)
{
if (id == null)
{
return NotFound();
}
Fileset = await _context.Fileset.FirstOrDefaultAsync(m => m.Id == id);
if (Fileset == null)
{
return NotFound();
}
ADGroups.Add(new SelectListItem { Text = "Standard", Value = Fileset.Adgroup });
ADGroups.Add(new SelectListItem { Text = "Restricted", Value = Fileset.Adgroup + "_R" });
if (!string.IsNullOrEmpty(ADGroup))
{
GetGroupMembership(ADGroup);
}
return Page();
}
如果我在浏览器中手动输入查询,例如:
full_url?ADGroup=组名
然后页面加载选定的群组成员。
有人能帮忙吗?
最好也将这两个值之一设置为默认值,而不是默认为空或通过在 <option></option>
标记中设置来复制其中一个值。
标签助手在服务器上执行。呈现页面时,锚标记帮助器上的 asp-route-ADGroup
属性未填充 selected 组,因为此时还没有 selected 组。一旦页面在浏览器中执行和呈现,标签助手就没有作用了。
您可以做的是创建一个客户端函数来处理下拉列表的 onchange
事件:
function adGroupSelected(e){
location.href = "/full_url?Group=" + e.selectedOptions[0].value;
}
然后将其分配给 select 标签助手中当前空的 onchange
处理程序:
<select asp-for="ADGroup" asp-items="Model.ADGroups" onchange="adGroupSelected(this)">...
您不需要锚标签助手。
我在我的一个 Razor 页面上使用 SelectList 作为下拉列表,以允许用户选择广告组。当他们单击 'Set Group' 按钮时,它应该会显示该组的成员。当前正在重新加载页面,未选择任何组。
这是我的下拉代码:
<div>
<hr />
<dl class="row">
<dt class="col-sm-2">
AD Group:
</dt>
<dd class="col-sm-10">
<select asp-for="ADGroup" asp-items="Model.ADGroups" onchange=""><option value=""></option></select> <a asp-page="./UpdateADGroup" asp-route-ADGroup="@Model.ADGroup" class="btn btn-outline-info btn-sm">Set Group</a>
</dd>
<dt class="col-sm-2">
Current Members:
</dt>
<dd class="col-sm-10">
@Html.DisplayFor(model => model.Members)
</dd>
</dl>
</div>
以下是我认为与我的模型相关的部分class:
private readonly RDSTestSiteContext _context;
public UpdateADGroupModel(RDSTestSiteContext context)
{
_context = context;
}
[BindProperty(SupportsGet = true)]
public string ADGroup { get; set; }
public List<SelectListItem> ADGroups = new List<SelectListItem>();
[BindProperty]
public Fileset Fileset { get; set; }
[BindProperty(SupportsGet = true)]
public string Members { get; set; }
public async Task<IActionResult> OnGetAsync(long? id)
{
if (id == null)
{
return NotFound();
}
Fileset = await _context.Fileset.FirstOrDefaultAsync(m => m.Id == id);
if (Fileset == null)
{
return NotFound();
}
ADGroups.Add(new SelectListItem { Text = "Standard", Value = Fileset.Adgroup });
ADGroups.Add(new SelectListItem { Text = "Restricted", Value = Fileset.Adgroup + "_R" });
if (!string.IsNullOrEmpty(ADGroup))
{
GetGroupMembership(ADGroup);
}
return Page();
}
如果我在浏览器中手动输入查询,例如:
full_url?ADGroup=组名
然后页面加载选定的群组成员。
有人能帮忙吗?
最好也将这两个值之一设置为默认值,而不是默认为空或通过在 <option></option>
标记中设置来复制其中一个值。
标签助手在服务器上执行。呈现页面时,锚标记帮助器上的 asp-route-ADGroup
属性未填充 selected 组,因为此时还没有 selected 组。一旦页面在浏览器中执行和呈现,标签助手就没有作用了。
您可以做的是创建一个客户端函数来处理下拉列表的 onchange
事件:
function adGroupSelected(e){
location.href = "/full_url?Group=" + e.selectedOptions[0].value;
}
然后将其分配给 select 标签助手中当前空的 onchange
处理程序:
<select asp-for="ADGroup" asp-items="Model.ADGroups" onchange="adGroupSelected(this)">...
您不需要锚标签助手。