【发布时间】:2017-11-15 09:16:54
【问题描述】:
我正在尝试使用以下方式呈现具有一些布尔属性(必需和禁用)的单选按钮:
@Html.RadioButton("radio-name","false", new { id="test", required=Model.BooleanValue})
和
<input type="radio" name="radio-name" id="radio-name-no" value="false" class="radio" @if (!Model.BooleanValue) { <text>required</text> } disabled="@Model.BooleanValue" />
但是输出是这样的:
<input id="test" name="radio-name" required="False" value="false" type="radio">
和
<input name="radio-name" id="radio-name-no" value="false" class="radio" disabled="True" type="radio">
MVC4 应该按照 HTML5 规范呈现布尔属性,所以为什么它输出 disabled="True"(或 False)而不是 disabled="disabled" 或 disabled(或者如果 BooleanValue 属性是 @987654330 则什么都不输出@)?
【问题讨论】:
-
因为您使用
disabled="@Model.BooleanValue"告诉它 - 但是您想在这里做什么。disabled="true"和disabled="false"(或disabled="disabled"或只是disabled)都是相同的 - 它的存在确定其是否禁用的属性。您需要有条件地添加属性。 -
Razor2 应该,如果 HTML5 属性是布尔属性,自动将其呈现为
disabled(或disabled=disabled)而不是disabled="True",并且如果模型的属性为 false 或 null。就我而言,它似乎做了一个 ToString() 并直接将布尔值分配给属性。 -
不是第一种情况(通过使用
new { ... }添加htmlAttributes(条件属性不适用)。第二种情况确实有效,将生成disabled="disabled" if the property istrue`,如果false- 我只能假设你没有使用 Razor2 -
感谢您对第一个案例的澄清。对于第二个案例,我仔细检查了 Razor dll 版本,它是 2.0.20710.0
-
在 MVC-5 中对我来说效果很好(目前无法在 MVC-4 中测试)
标签: asp.net-mvc-4 razor-2