Việc phức tạp hóa một nguyên thủy với các trường ẩn để làm rõ liệu Sai hay Null không được khuyến khích.
Hộp kiểm không phải là thứ bạn nên sử dụng - nó thực sự chỉ có một trạng thái: Đã kiểm tra . Nếu không, nó có thể là bất cứ điều gì.
Khi trường cơ sở dữ liệu của bạn là boolean có thể null ( bool?
), UX phải sử dụng 3-Radio Buttons, trong đó nút đầu tiên đại diện cho "Đã kiểm tra" của bạn, nút thứ hai đại diện cho "Chưa kiểm tra" và nút thứ ba đại diện cho null của bạn, bất kể ngữ nghĩa của null nghĩa là. Bạn có thể sử dụng <select><option>
danh sách thả xuống để lưu bất động sản, nhưng người dùng phải nhấp hai lần và các lựa chọn gần như không rõ ràng ngay lập tức.
1 0 null
True False Not Set
Yes No Undecided
Male Female Unknown
On Off Not Detected
RadioButtonList, được định nghĩa là phần mở rộng có tên RadioButtonForSelectList, xây dựng các nút radio cho bạn, bao gồm giá trị đã chọn / đã chọn và đặt <div class="RBxxxx">
để bạn có thể sử dụng css để làm cho các nút radio của bạn nằm ngang (hiển thị: inline-block), dọc hoặc theo kiểu bảng (display: inline-block; width: 100px;)
Trong mô hình (Tôi đang sử dụng chuỗi, chuỗi cho định nghĩa từ điển làm ví dụ sư phạm. Bạn có thể sử dụng 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
// 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());
}
}