Simplify the primitive with hidden fields to find out if False or Null is not recommended.
The checkbox is not what you should use - it really has only one state: Checked . Otherwise, it could be anything.
When the database field is null logical ( bool? ), UX should use 3-radio buttons, where the first button represents your โVerifiedโ, the second button represents โNot Verifiedโ, and the third button represents your null, regardless of the semantics of the null value. You can use the <select><option> drop-down list to save the property, but the user must double-click, and the selection is not as fast as instant.
1 0 null True False Not Set Yes No Undecided Male Female Unknown On Off Not Detected
A RadioButtonList, defined as an extension named RadioButtonForSelectList, creates switches for you, including the selected / checked value, and sets <div class="RBxxxx"> so that you can use css so that your switches switch horizontally (display: inline block), vertical or tabular (display: built-in unit, width: 100 pixels;)
In the model (I use a string, a string to define a dictionary as a pedagogical example. You can use bool ?, string)
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 // eg <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()); } }