【问题标题】:MVC4: HTML5 boolean attributes rendered with True/False valueMVC4:使用 True/False 值呈现的 HTML5 布尔属性
【发布时间】: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 is true`,如果false - 我只能假设你没有使用 Razor2
  • 感谢您对第一个案例的澄清。对于第二个案例,我仔细检查了 Razor dll 版本,它是 2.0.20710.0
  • 在 MVC-5 中对我来说效果很好(目前无法在 MVC-4 中测试)

标签: asp.net-mvc-4 razor-2


【解决方案1】:

解决方案很奇怪。在进行一些测试时,我在 HTML 输入标记中放置了一个 @if。此 if 用于显示 required 属性。在这个@if 之后,我放了disabled="@Model.BooleanValue" 属性。

这个命令似乎破坏了预期的行为。在@if 之前放置disabled 属性解决了问题(后来我删除了@if 并将其转换为required="@(!Model.BooleanValue)")。

现在工作代码是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多