Komplizieren eines Grundelements mit ausgeblendeten Feldern, um zu klären, ob False oder Null nicht empfohlen wird.
Das Kontrollkästchen ist nicht das, was Sie verwenden sollten - es hat wirklich nur einen Status: Aktiviert . Sonst könnte es alles sein.
Wenn Ihr Datenbankfeld ein nullfähiger Boolescher Wert ( bool?
) ist, sollte die UX 3 Optionsfelder verwenden, wobei die erste Schaltfläche Ihr "Aktiviert" darstellt, die zweite Schaltfläche "Nicht überprüft" und die dritte Schaltfläche Ihre Null darstellt, unabhängig von der Semantik null bedeutet. Sie können eine <select><option>
Dropdown-Liste verwenden, um Immobilien zu speichern, aber der Benutzer muss zweimal klicken und die Auswahlmöglichkeiten sind bei weitem nicht so augenblicklich klar.
1 0 null
True False Not Set
Yes No Undecided
Male Female Unknown
On Off Not Detected
Die RadioButtonList, definiert als Erweiterung mit dem Namen RadioButtonForSelectList, erstellt die Optionsfelder für Sie, einschließlich des ausgewählten / aktivierten Werts, und legt die fest <div class="RBxxxx">
dass Sie mithilfe von CSS Ihre Optionsfelder horizontal (Anzeige: Inline-Block), vertikal oder vertikal schalten können in einer Tabellenform (Anzeige: Inline-Block; Breite: 100px;)
Im Modell (ich verwende Zeichenfolge, Zeichenfolge für die Wörterbuchdefinition als pädagogisches Beispiel. Sie können bool?, Zeichenfolge verwenden)
public IEnumerable<SelectListItem> Sexsli { get; set; }
SexDict = new Dictionary<string, string>()
{
{ "M", "Male"},
{ "F", "Female" },
{ "U", "Undecided" },
};
//Convert the Dictionary Type into a SelectListItem Type
Sexsli = SexDict.Select(k =>
new SelectListItem
{
Selected = (k.Key == "U"),
Text = k.Value,
Value = k.Key.ToString()
});
<fieldset id="Gender">
<legend id="GenderLegend" title="Gender - Sex">I am a</legend>
@Html.RadioButtonForSelectList(m => m.Sexsli, Model.Sexsli, "Sex")
@Html.ValidationMessageFor(m => m.Sexsli)
</fieldset>
public static class HtmlExtensions
{
public static MvcHtmlString RadioButtonForSelectList<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IEnumerable<SelectListItem> listOfValues,
String rbClassName = "Horizontal")
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var sb = new StringBuilder();
if (listOfValues != null)
{
// Create a radio button for each item in the list
foreach (SelectListItem item in listOfValues)
{
// Generate an id to be given to the radio button field
var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value);
// Create and populate a radio button using the existing html helpers
var label = htmlHelper.Label(id, HttpUtility.HtmlEncode(item.Text));
var radio = String.Empty;
if (item.Selected == true)
{
radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id, @checked = "checked" }).ToHtmlString();
}
else
{
radio = htmlHelper.RadioButtonFor(expression, item.Value, new { id = id }).ToHtmlString();
}// Create the html string to return to client browser
// e.g. <input data-val="true" data-val-required="You must select an option" id="RB_1" name="RB" type="radio" value="1" /><label for="RB_1">Choice 1</label>
sb.AppendFormat("<div class=\"RB{2}\">{0}{1}</div>", radio, label, rbClassName);
}
}
return MvcHtmlString.Create(sb.ToString());
}
}