我是从WebForms到MVC 3的新手,并且@Html.EditorFor()
辅助方法存在问题。
我有一个强类型视图,表示数据库中的数据,其中一个方法是bool?
类型。我希望它显示为一个复选框,但它显示为一个下拉列表,其中包含选项“未设置”,“真实”和“假”。
将此转换为常规复选框的最简单方法是什么?
我知道我可以将数据类型更改为普通的bool
,但这是我正在使用的一个大型EF实体,为此重新创建整个类似乎很痛苦。我也意识到我将失去跟踪“未设置”状态的能力,但显示一个简单的复选框对我来说更重要。
答案 0 :(得分:10)
使用复选框辅助方法代替@ Html.CheckBoxFor()
它呈现下拉列表,因为复选框无法提供“未设置”值。
答案 1 :(得分:6)
基本上,ASP.NET MVC有一些默认模板(你can read that here)。
如果您愿意,可以添加自己的EditorTemplate,ASP.NET MVC将使用它而不是默认值。为此,您应将文件'Boolean。{your-view-engine-extension}'(例如:'Boolean.aspx')放入〜/ Views / ControllerName / EditorTemplates / 或〜/ Views / Shared / EditorTemplates / 并使用您自己的功能覆盖它。
这是布尔值的默认编辑器,可以由您增强:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
private List<SelectListItem> TriStateValues {
get {
return new List<SelectListItem> {
new SelectListItem { Text = "Not Set", Value = String.Empty, Selected = !Value.HasValue },
new SelectListItem { Text = "True", Value = "true", Selected = Value.HasValue && Value.Value },
new SelectListItem { Text = "False", Value = "false", Selected = Value.HasValue && !Value.Value },
};
}
}
private bool? Value {
get {
if (ViewData.Model == null) {
return null;
}
return Convert.ToBoolean(ViewData.Model, System.Globalization.CultureInfo.InvariantCulture);
}
}
</script>
<% if (ViewData.ModelMetadata.IsNullableValueType) { %>
<%= Html.DropDownList("", TriStateValues, new { @class = "list-box tri-state" }) %>
<% } else { %>
<%= Html.CheckBox("", Value ?? false, new { @class = "check-box" }) %>
<% } %>