asp.net mvc中boolean值的Html帮助器

Bla*_*man 1 asp.net-mvc html-helper

是否有任何html辅助方法在下拉列表中显示布尔值?

Nic*_*ork 13

这是一个旧线程,但仍然是一些搜索的顶部.

您可以使用内置的DropDownListFor HTML Helper来完成此操作:

 <%= Html.DropDownListFor(model => Model.MyBooleanProperty,new List<SelectListItem>(){ new SelectListItem(){ Text = "Yes", Value="True"}, new SelectListItem(){ Text = "No", Value="False"}})%>
Run Code Online (Sandbox Code Playgroud)

您还可以实现自己的HTML Helper:

    public static MvcHtmlString BooleanDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        return BooleanDropdownListFor(htmlHelper, expression, null);

    }
    public static MvcHtmlString BooleanDropdownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string EmptyText)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        bool? value = null;

        if (metadata != null && metadata.Model != null)
        {
            if (metadata.Model is bool)
                value = (bool)metadata.Model;
            else if (metadata.Model.GetType() == typeof(bool?))
                value = (bool?)metadata.Model;
        }

        List<SelectListItem> items = EmptyText != null ?
            new List<SelectListItem>() { new SelectListItem() { Text = EmptyText, Value = "" }, new SelectListItem() { Text = "Yes", Value = "True", Selected = (value.HasValue && value.Value == true) }, new SelectListItem() { Text = "No", Value = "False", Selected = (value.HasValue && value.Value == false) } } :
            new List<SelectListItem>() {new SelectListItem() { Text = "Yes", Value = "True", Selected = (value.HasValue && value.Value == true) }, new SelectListItem() { Text = "No", Value = "False", Selected = (value.HasValue && value.Value == false) } };

        return htmlHelper.DropDownListFor(expression, items);
    }
Run Code Online (Sandbox Code Playgroud)

我建议在View Model上使用可以为空的bool属性,这样下拉列表不会默认为"false"或"true".您可以使用Required属性轻松标记viewmodel,如果未选择任何选项,则该属性将为handel.