У меня есть свойство для одного из моих объектов, которое имеет логическое значение null. Я хочу, чтобы в моей логике значение true представляло Да, false - Нет, а null - N / A. Теперь, поскольку у меня будет несколько свойств, подобных этим, на многих различных объектах, имеет смысл создать редактор и отобразить шаблоны для этих свойств. Я собираюсь использовать jQuery UI для применения визуального элемента buttonset после того, как все это заработает, но пока это выходит за рамки моей проблемы. Мой шаблон редактора выглядит следующим образом.
@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 не будет правильно устанавливать свойство selected из-за проверки, которая выполняется для проверки того, что имя не пустое или не пустое (см. 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
, потому что части true / false будут разных анонимных типов, и я получаю ошибку.
Я борюсь за то, как это сделать, и надеюсь, у кого-нибудь из вас есть предложение, как решить эту проблему?