Мои представления / Shared / EditorTemplates / Boolean.cshtml работают в обоих направлениях, обрабатывая пустые и обычные флажки.
@model bool?
@{
if (ViewData.ModelMetadata.IsNullableValueType)
{
<text><div class="RB"></text>
Dictionary<string, object> yesAttrs = new Dictionary<string, object>();
Dictionary<string, object> noAttrs = new Dictionary<string, object>();
Dictionary<string, object> nullAttrs = new Dictionary<string, object>();
yesAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "Yes");
noAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "No");
nullAttrs.Add("id", ViewData.TemplateInfo.GetFullHtmlFieldId("") + "NA");
if (Model.HasValue && Model.Value)
{
yesAttrs.Add("checked", "checked");
}
else if (Model.HasValue && !Model.Value)
{
noAttrs.Add("checked", "checked");
}
else
{
nullAttrs.Add("checked", "checked");
}
@Html.RadioButtonFor(x => x, "true", yesAttrs)
<label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))Yes">Yes</label>
@Html.RadioButtonFor(x => x, "false", noAttrs)
<label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))No">No</label>
@Html.RadioButtonFor(x => x, "", nullAttrs)
<label for="@(ViewData.TemplateInfo.GetFullHtmlFieldId(""))NA" class="nostrong" title="Unknown or To Be Determined">tbd</label>
@:</div>
}
else
{
ModelState state = ViewData.ModelState[ViewData.ModelMetadata.PropertyName];
bool value = Model ?? false;
if (state != null && state.Errors.Count > 0)
{
<div class="input-validation-error" style="float: left"></div>
}
else
{
@Html.CheckBox("", value)
}
}
}
Раскрывающиеся списки только для 2-3 выбранных элементов не важны для пользователей;они требуют два щелчка, тогда как переключатели требуют только один щелчок (если у вас нет недвижимости).
Когда ваши клиенты / пользователи не приняли решение, не хотят его принимать, не думают, что вы знаете, что ответ - это ваше дело, или вам нужно отменить true/1/on/positive
или false/0/off/negative
поскольку ни один из них не является точным, третий параметр для Nullable<boolean>
может представлять собой «Определено» (tbd), не задано, неизвестно или неприменимо (н / п).