【发布时间】:2016-03-18 07:17:10
【问题描述】:
我有一个名为 Critical 的属性,它是一个 Nullable Bool,例如“NULL, True, False”作为关键位 null 存储在表中。用户可以选择“Yes/No 或空白(将值存储为 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>
当我运行我的视图时,我看到默认下拉列表,其值为“未设置”、“真”和“假”。为什么我的编辑器模板不显示?
【问题讨论】:
-
您的
EditorTemplate除了创建List<SelectListItem>();之外什么都不做 - 它不显示任何内容(不生成任何 html) -
它渲染的是默认的 SelectList 而不是编辑器模板中的那个
-
EditorTemplate中根本没有要渲染的内容(只是创建一个新的SelectList并不意味着它会被渲染)。至少模板需要包含@DropDownListFor(m => m, selectlist) -
@StephenMuecke :) 明白了,现在渲染。还有一件事,当我提交表单时,MVC 验证会阻止提交表单,除非我从下拉列表中选择一个值。将空白值添加到下拉列表的全部原因是用户没有选择值并选择空白。如何防止 MVC 不进行下拉选择,它的高亮显示为红色。
-
然后删除第一个
SelectListItem并使用@DropDownListFor(m => m, selectlist, "")并确保该属性没有[Required]属性
标签: c# asp.net-mvc-3