У меня есть свойство на одном из моих объектов, которое является нулевым логическим, я хочу, чтобы моя логика имела значение true, да, 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 не будет корректно устанавливать проверенное свойство из-за проверки, сделанной для проверки того, что имя не пустое или пустое (см. MVC3 source, 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> </div>
Я не могу условно добавить HtmlAttribute, используя что-то вроде if?truevalue:falsevalue
, потому что истинные/ложные части будут иметь разные анонимные типы, и я получаю сообщение об ошибке.
Я борюсь за то, как это должно быть сделано, и я надеюсь, что у одного из вас есть предложение о том, как решить эту проблему?