使用 Razor Select Tag Helper 强制单选

Posted

技术标签:

【中文标题】使用 Razor Select Tag Helper 强制单选【英文标题】:Force single select with Razor Select Tag Helper 【发布时间】:2022-01-12 08:03:59 【问题描述】:

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

我的 Razor 页面有一个包含两个 select 元素的表单,一次只有一个是活动的(不是 disabled)。它们的值与我模型中的相同属性相关联。 我必须将我的属性设为一个数组,这样我才能访问两个选择的值,尽管其中一个总是“空”。

这导致我的选择在 html 中使用“multiple”属性呈现。我怎样才能摆脱这个?我希望它是单选。

我的选择:

<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-attribute 的情况下出现,以使我的属性再次成为普通字符串并告诉框架填充它输入不是null

【问题讨论】:

最简单的解决方案是不要使用标签助手,如果这样做会妨碍您。 【参考方案1】:

基于the comment from Mike Brind,我可以通过简单地为我的两个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>

【讨论】:

以上是关于使用 Razor Select Tag Helper 强制单选的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Razor Pages 强制 Anchor Tag Helper (asp-page) 使用小写路由

自动完成在 Visual Studio Code 中的 ASP.NET Core 5 Razor Tag Helper 中不起作用

Razor语法

如何在单独的脚本中定义的Razor中使用对象

Razor 页面解说

PHP 在symfony中使用您自己的对象填充object_select_tag