使用 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ä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ä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 中不起作用