我正在尝试让 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 中修复。