我在我的一个对象上有一个属性,它是一个可以为空的布尔值,我想让我的逻辑让true代表Yes,false代表No,null代表N/A。现在,因为我将在许多不同的对象上拥有多个这样的属性,所以为这些属性创建一个编辑器并显示模板是最有意义的。在这一切正常后,我将使用jQuery UI来应用按钮集的可视元素,但现在,这超出了我的问题的范围。我的编辑器模板如下所示。
@model bool?
<div data-ui="buttonset">
@Html.RadioButtonFor(x => x, true, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes"}) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x, false, new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x, "null", new { id = ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA" }) <label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA">N/A</label>
</div>
我的问题是,在任何情况下,我都不能让这个编辑器模板正确地显示模型的当前值。因为我在这个作用域中呈现的不是模型的属性,而是模型本身,所以MVC3中的内置逻辑将不会正确地设置checked属性,因为需要检查名称是否为空或null (参见MVC3源代码,InputExtensions.cs:line#259)。我不能通过比较Model来动态设置checked属性,因为浏览器检查单选按钮是否存在checked属性,而不是它的值,所以即使我的单选按钮看起来像下面这样,最后一个仍然是被选中的。
<div class="span-4" data-ui="buttonset">
<input checked="checked" id="MyObject_BooleanValueYes" name="MyObject.BooleanValue" type="radio" value="True" /><label for="MyObject_BooleanValueYes">Yes</label>
<input checked="" id="MyObject_BooleanValueNo" name="MyObject.BooleanValue" type="radio" value="False" /><label for="MyObject_BooleanValueNo">No</label>
<input checked="" id="MyObject_BooleanValueNA" name="MyObject.BooleanValue" type="radio" value="null" /><label for="MyObject_BooleanValueNA">N/A</label>
</div><span class="field-validation-valid" data-valmsg-for="MyObject.BooleanValue" data-valmsg-replace="true"></span> </div>
我不能使用像if?truevalue:falsevalue
这样的东西有条件地添加HtmlAttribute,因为true/false部分将是不同的匿名类型,并且我会得到一个错误。
我正在为如何解决这个问题而苦苦挣扎,我希望你们中的一个人能给我一个解决这个问题的建议?
https://stackoverflow.com/questions/6752013
复制相似问题