使用 Razor Select Tag Helper 强制单个 select

Force single select with Razor Select Tag Helper

我正在努力寻找以下问题的解决方案:

我的 Razor-Page 有一个包含两个 select 元素的表单,一次只有一个元素处于活动状态(不是 disabled)。它们的值与我模型中的相同 属性 关联。 我必须让我的 属性 成为一个数组,这样我就可以访问两个 select 的值,尽管其中一个总是“null”。

这导致我的 select 在 HTML 中使用“多重”属性呈现。我怎样才能摆脱这个?我希望它是单一的 select.

我的selects:

<select asp-for=TätigkeitIds required onchange="this.form.submit()" disabled=@(Model.Erfassung.TätigkeitNavigation != null && Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, true))>
@{
    <option selected=@(Model.Erfassung.TätigkeitNavigation == null) value="">Bitte eine nicht abzurechnende Tätigkeit wählen</option>
    foreach(StammdatenTätigkeit Tätigkeit in await Model.GetTätigkeitenAsync(false))
    {
        <option selected="@(Model.Erfassung.TätigkeitNavigation != null && String.Equals(Tätigkeit.Id, Model.Erfassung.TätigkeitNavigation.Id))" value=@Tätigkeit.Id>@Tätigkeit.Name</option>
    }
}
</select>
<select asp-for=TätigkeitIds required onchange="this.form.submit()" disabled=@(Model.Erfassung.TätigkeitNavigation != null && Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, false))>
@{
    <option selected=@(Model.Erfassung.TätigkeitNavigation == null || Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, false))  value="">nicht abrech. Std.</option>
    foreach(StammdatenTätigkeit Tätigkeit in await Model.GetTätigkeitenAsync(true))
    {
        <option selected="@(Model.Erfassung.TätigkeitNavigation != null && String.Equals(Tätigkeit.Id, Model.Erfassung.TätigkeitNavigation.Id))" value=@Tätigkeit.Id>@Tätigkeit.Name</option>
    }
}
</select>

属性:

[BindProperty(SupportsGet = false)]
public String[] TätigkeitIds { get; set; }

渲染的HTML:

<select required onchange="this.form.submit()" id="T_tigkeitIds" multiple="multiple" name="T&#xE4;tigkeitIds">
    <option value="" selected="selected">Bitte eine nicht abzurechnende Tätigkeit wählen</option>
    <option selected="selected" value="d58559ac-6601-4871-aff2-aa72982fd5cc">Schulung</option>
</select>
<select required onchange="this.form.submit()" disabled="disabled" id="T_tigkeitIds" multiple="multiple" name="T&#xE4;tigkeitIds">
    <option selected="selected" value="">nicht abrech. Std.</option>
    <option value="c2b8fd29-c85b-49c1-a2db-35b9fa9d11a0">PJ-Bearbeitung</option>
</select>

本质上,我正在寻找一种方法来强制 HTML-Select 在没有 multiple 属性 的情况下出现使我的 属性 再次成为普通字符串,并告诉框架用不是 null.

的任何输入填充它

基于 ,我可以通过简单地停用我的两个 select-标签的标签助手来解决我的问题,如下所示:

<!select name="TätigkeitIds" required onchange="this.form.submit()" @(Model.Erfassung.TätigkeitNavigation != null && Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, false) ? "disabled" : "")>
@{
    <option selected=@(Model.Erfassung.TätigkeitNavigation == null || Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, false))  value="">nicht abrech. Std.</option>
    foreach(StammdatenTätigkeit Tätigkeit in await Model.GetTätigkeitenAsync(true))
    {
        <option selected="@(Model.Erfassung.TätigkeitNavigation != null && String.Equals(Tätigkeit.Id, Model.Erfassung.TätigkeitNavigation.Id))" value=@Tätigkeit.Id>@Tätigkeit.Name</option>
    }
}
</!select>