我有一个名为Critical的属性,它是一个Nullable Bool,例如“NULL,True,False”,存储在tabe中,作为Critical位为空。用户可以选择“Yes / No或blank(将值存储为NULL)”
我在Shared / EditorTemplates中创建了一个名为FriendlyBool.cshtml
的编辑器模板@model bool?
@using System.Web.Mvc
@{
var selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem { Text = "", Value = "" });
selectList.Add(new SelectListItem { Text = "Yes", Value = "true", Selected = Model.HasValue && Model.Value });
selectList.Add(new SelectListItem { Text = "No", Value = "false", Selected = Model.HasValue && !Model.Value });
}
在我看来,我称之为编辑模板
<div class="bodyContent">
<span class="leftContent">
@Html.Label("Critical")
</span><span class="rightContent">
@Html.EditorFor(model => model.critical, "FriendlyBool")
</span>
</div>
当我运行我的视图时,我看到默认下拉列表的值为“未设置”,“真”和“假”。为什么我的编辑器模板不显示?
答案 0 :(得分:4)
将答案从alireza扩展到迎合传递htmlAttributes:
@model bool?
@{
var selectList = new List<SelectListItem>
{
new SelectListItem {Text = "(Any)", Value = String.Empty, Selected = !Model.HasValue},
new SelectListItem {Text = "Yes", Value = "true", Selected = Model.HasValue && Model.Value},
new SelectListItem {Text = "No", Value = "false", Selected = Model.HasValue && !Model.Value}
};
}
@Html.DropDownListFor(m => m, selectList, ViewData["htmlAttributes"])
用法:
@Html.EditorFor(model => model.critical, new
{
htmlAttributes = new { @class = "variables-filter", disabled = "disabled" }
})
答案 1 :(得分:3)
您EditorTemplate
未生成任何HTML(仅创建SelectList
)。将模板更改为
@model bool?
@using System.Web.Mvc
@{
var selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem { Text = "Yes", Value = "true" });
selectList.Add(new SelectListItem { Text = "No", Value = "false" });
}
@Html.DropDownListFor(m => m, selectList, "")
同时确保您的媒体资源没有[Required]
属性。
旁注
DropDownListFor()
的{{1}}重载
生成labelOption
选项null
的{{1}}属性。
您绑定到属性,因此如果值为Selected
,则为第一个
选项将被选中,或者如果其SelectListItem
是第二个选项(&#34;是&#34;)
将被选中。答案 2 :(得分:2)
如果要从数据库更新属性,请使用以下命令:
@using System.Web.Mvc
@model bool?
@{
var selectList = new List<SelectListItem>();
selectList.Add(new SelectListItem { Text = "", Value = String.Empty,Selected = !Model.HasValue });
selectList.Add(new SelectListItem { Text = "Yes", Value = "true",Selected = Model.HasValue && Model.Value });
selectList.Add(new SelectListItem { Text = "No", Value = "false", Selected = Model.HasValue && !Model.Value });}
@Html.DropDownListFor(m => m, selectList)
此外,您可以使用属性的[UIHint("FriendlyBool")]
属性来使用此模板