Шаблон редактора MVC3 для логического значения, допускающего значение NULL, с использованием RadioButtons

У меня есть свойство одного из моих объектов, которое является логическим значением, допускающим значение NULL, я хочу, чтобы моя логика имела истинное представление «Да», «ложь» - «Нет» и null - «Н / А. Теперь, поскольку у меня будет несколько подобных свойств для многих разных объектов, имеет смысл создать редактор и отображать шаблоны для этих свойств. Я собираюсь использовать пользовательский интерфейс jQuery для применения визуального элемента набора кнопок после того, как все это заработает, но пока это выходит за рамки моей проблемы. Мой шаблон редактора выглядит так.

@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 из-за проверки, которая выполняется для проверки того, что имя не является пустым или нулевым (см. MVC3 источник, InputExtensions.cs: строка № 259). Я не могу установить проверенный атрибут динамически, сравнивая с моделью, потому что браузер проверяет радиокнопку на наличие проверенного атрибута, а не на его значение, поэтому, хотя мои переключатели будут выглядеть следующим образом, последний по-прежнему остается выбранным .

<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>&nbsp;</div>

Я не могу условно добавить HtmlAttribute, используя что-то вроде if? Truevalue: falsevalue , потому что части true / false будут разных анонимных типов, и я получаю сообщение об ошибке.

Я пытаетесь решить, как это сделать, и надеюсь, что у кого-нибудь из вас есть предложение, как решить эту проблему?

19
задан Nick Albrecht 19 July 2011 в 18:13
поделиться