【发布时间】: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