使用Razor Select Tag Helper强制单选、消除自动生成的multiple属性
解决方案
方案1(首选):将模型属性改回普通字符串类型
这是最适配你场景的解决方式,核心逻辑:被设置了disabled属性的表单元素,浏览器提交表单时默认不会将其值纳入提交内容。你同一时间仅会有一个select处于启用状态,完全不需要用数组接收值,直接使用普通字符串属性即可,框架会自动将唯一启用的select的选中值绑定到该属性。
操作步骤:
- 修改模型属性定义:
[BindProperty(SupportsGet = false)] public string TätigkeitId { get; set; }
- 将两个select标签的
asp-for属性值修改为TätigkeitId。
修改后Tag Helper不会再自动生成multiple属性,默认就是单选下拉框的渲染效果,同时不会影响表单提交后的取值逻辑。
方案2(次选,需保留数组属性时使用):手动覆盖multiple属性
如果有特殊场景必须保留数组类型的属性,可以直接在select标签上手动指定multiple="false",Razor Tag Helper的规则是用户手动声明的属性优先级高于自动生成的属性,手动指定后会覆盖框架自动添加的multiple="multiple"属性。
修改后的select标签示例:
<select asp-for=TätigkeitIds multiple="false" required onchange="this.form.submit()" disabled=@(Model.Erfassung.TätigkeitNavigation != null && Boolean.Equals(Model.Erfassung.TätigkeitNavigation.Abzurechnen, true))> <!-- 下拉选项内容 --> </select>
两个select都按上述方式添加multiple="false"即可生效。
额外优化建议
当前渲染后的两个select的id属性值重复,不符合HTML规范,可能导致前端脚本、样式出现异常,可以手动给两个select设置不同的id属性区分。
内容的提问来源于stack exchange,提问作者jeanluc162
相关产品推荐
相关产品推荐

