Asp.net mvc 4 MVC4:HTML5布尔属性以真/假值呈现
我正在尝试使用以下方法渲染具有一些布尔属性(必需和禁用)的radiobutton: 及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属
但结果是:
<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" />