【问题标题】:Conditional Attributes in Razor v2Razor v2 中的条件属性
【发布时间】:2012-11-28 20:14:48
【问题描述】:

我正在尝试让 Razor 2 中的条件属性支持正常工作,但在我的一生中,它的行为并没有达到预期。

我的 HTML 输出如下所示...

<label class="radio inline"><input checked="true" id="ActivationType" name="ActivationType" type="radio" value="0">Option 0</label>
<label class="radio inline"><input checked="false" id="ActivationType" name="ActivationType" type="radio" value="1">Option 1</label>

现在这个 HTML 的问题是,即使我希望选项 0 被检查,选项 1 也是实际检查的内容。现在这个 HTML 是由 MVC 中的以下代码输出的,ans 位于 DisplayTemplate 中。

<label class="radio inline">@Html.RadioButtonFor(x => x, "0", new{@checked = Model.HasValue && (int)Model.Value == 0})Option 0</label>
<label class="radio inline">@Html.RadioButtonFor(x => x, "1", new{@checked = Model.HasValue && (int)Model.Value == 1})Option 1</label>

问题在于,无论它的实际值如何,仅仅存在 checked 属性就足以让浏览器将其视为已检查。因此,Razor 2 中的一个特性(据称)是,如果属性的值为 null、空字符串或 false,则该属性本身不会被渲染。我期待看到的是这个……

<label class="radio inline"><input checked="true" id="ActivationType" name="ActivationType" type="radio" value="0">Option 0</label>
<label class="radio inline"><input id="ActivationType" name="ActivationType" type="radio" value="1">Option 1</label>

现在我在 StackOverflow 上发现了很多与此相关的问题,所以我显然不是唯一一个遇到此问题的人。问题是没有一个问题似乎有一个可靠的答案。我什至在我的 webconfig 中添加了一个程序集重定向,以确保它使用正确版本的 Razor,因为我确实将这个应用程序从 MVC3 迁移到 MVC4

<dependentAssembly>
  <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>

有没有人遇到过这种情况?

更新:我实际上是在尝试获取一组单选按钮,这些单选按钮可以让我以编程方式确定它们是否被检查,而无需定义一个代码块,我在其中创建一个新字典复选框以避免呈现没有值的属性。

这是 MVC 中的一个问题,如此处所述 (MVC3 EditorTemplate for a nullable boolean using RadioButtons) 但我希望摆脱该解决方法,因为据称它已在 Razor2/MVC4 中修复。

【问题讨论】:

  • 请您简单说明您想要达到的目标吗?
  • 我认为你不需要设置HTML属性,它应该根据模型的值选择正确的。

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


【解决方案1】:

从 MVC 4 开始,我还发现条件属性在 html 辅助方法中不起作用。如果您将条件属性直接放在 html 标记中,例如

<input checked="@(Model.HasValue && (int)Model.Value == 0)" id="ActivationType" name="ActivationType" type="radio" ...

您应该会发现它会起作用。我在传递 disabled 属性时遇到了类似的问题。希望有帮助。

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 2016-04-19
    相关资源
    最近更新 更多