如何在 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>&nbsp;<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)">...

您不需要锚标签助手。