Asp.net mvc 4 MVC4:HTML5布尔属性以真/假值呈现

Asp.net mvc 4 MVC4:HTML5布尔属性以真/假值呈现,asp.net-mvc-4,razor-2,Asp.net Mvc 4,Razor 2,我正在尝试使用以下方法渲染具有一些布尔属性(必需和禁用)的radiobutton: 及 但结果是: <input id="test" name="radio-name" required="False" value="false" type="radio"> 及 MVC4应该按照HTML5规范呈现布尔属性,那么为什么它要输出disabled=“True”(或者False)而不是disabled=“disabled”或者disabled(或者如果BooleanValue属

我正在尝试使用以下方法渲染具有一些布尔属性(必需和禁用)的radiobutton:


但结果是:

<input id="test" name="radio-name" required="False" value="false" type="radio">



MVC4应该按照HTML5规范呈现布尔属性,那么为什么它要输出
disabled=“True”
(或者
False
)而不是
disabled=“disabled”
或者
disabled
(或者如果
BooleanValue
属性是
False
,那么就什么都没有了?

这个解决方案非常奇怪。在做一些测试时,我在HTML输入标记中放了一个@if。此if用于显示
必需属性。在@if之后,我将
disabled=“@Model.BooleanValue”
属性放在后面

这一秩序似乎破坏了预期的行为。将
disabled
属性放在@if之前解决了问题(稍后我删除了@if并将其转换为
required=“@(!Model.BooleanValue)”

现在的工作代码是:

<input type="radio" name="radio-name" id="radio-name-no" value="false" class="radio" required="@(!Model.BooleanValue)" disabled="@Model.BooleanValue" />


因为你用
disabled=“@Model.BooleanValue”
告诉它-但是你想在这里做什么呢
disabled=“true”
disabled=“false”
(或
disabled=“disabled”
或只是
disabled
)都是相同的-属性的存在决定了它是否被禁用。您需要有条件地添加属性。如果HTML5属性是一个布尔属性,Razor2应该自动将其呈现为
disabled
(或
disabled=disabled
),而不是
disabled=“True”
,并且如果模型的属性为false或null,则根本不呈现它。在我的例子中,它似乎做了一个ToString()并直接将布尔值赋给属性。在第一种情况下(通过使用
new{…}
添加
htmlAttributes
(然后条件属性不适用)。第二种情况确实有效并将生成
disabled=“disabled”如果属性为
true`并且如果
false
,则忽略它-我只能假设您没有使用Razor2Tanks来澄清第一种情况。对于第二种情况,我已经仔细检查了Razor dll版本,它是2.0.20710.0,在MVC-5中对我很好(目前无法在MVC-4中测试)
<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">
<input type="radio" name="radio-name" id="radio-name-no" value="false" class="radio" required="@(!Model.BooleanValue)" disabled="@Model.BooleanValue" />