False 또는 Null이 권장되지 않는지 여부를 명확히하기 위해 숨겨진 필드로 기본 요소를 복잡하게 만듭니다.
Checkbox는 사용해야하는 것이 아닙니다. 실제로 Checked 상태 만 있습니다 . 그렇지 않으면 무엇이든 될 수 있습니다.
데이터베이스 필드가 nullable 부울 ( bool?
)이면 UX는 3-Radio Buttons를 사용해야합니다. 여기서 첫 번째 버튼은 "Checked", 두 번째 버튼은 "Not Checked", 세 번째 버튼은 null을 나타냅니다. null은 의미합니다. <select><option>
드롭 다운 목록을 사용하여 부동산을 절약 할 수 있지만 사용자는 두 번 클릭해야하며 선택 사항이 거의 즉시 명확하지 않습니다.
1 0 null
True False Not Set
Yes No Undecided
Male Female Unknown
On Off Not Detected
RadioButtonForSelectList라는 확장명으로 정의 된 RadioButtonList는 선택 / 확인 된 값을 포함하여 라디오 버튼을 빌드하고 <div class="RBxxxx">
CSS를 사용하여 라디오 버튼을 수평 (디스플레이 : 인라인 블록), 수직 또는 테이블 형식으로 (디스플레이 : 인라인 블록; 너비 : 100px;)
모델에서 (저는 문자열, 사전 정의를위한 문자열을 교육적 예제로 사용하고 있습니다. 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());
}
}