这可能很简单,但却让我抓狂。我到处寻找这一点,发现有人提到了它,但没有提供解决方案。
我有一个简单的视图模型,它有一个布尔属性,没有数据注释,其他属性有,但这些都不会影响问题。
Public Property AcceptSurvey As Boolean我有一个强类型的视图,这个模型可以很好地用于服务器验证(即所有其他验证都可以很好地工作,并且AcceptSurvey是可选的)。
<%: Html.CheckBoxFor(Function(x) x.AcceptSurvey)%>当我启用客户端验证时,在提交表单时(未选中AcceptSurvey ),我收到消息“AcceptSurvey字段是必需的。”我认为这是因为当复选框被选中时,验证只看到一个值(true)。我意识到CheckBoxFor帮助器呈现了一个隐藏字段(相同的名称属性和值为false),并认为这是为了解决这个问题。
如果我将属性设置为可空,我就不能使用CheckBoxFor,我可以使用EditorFor,但这将呈现为一个包含三个属性(不是我想要的)的下拉列表,并且客户端验证工作正常。
我是不是太傻了?顺便说一句,我在客户端使用MVC JQuery。
发布于 2010-10-11 00:24:33
我不知道这是一个多好的答案,但它对我很有效。
我使用的是MVC2.0,因此我为Boolean数据类型创建了共享显示和编辑器模板。我将布尔值显示为一个有两个选项的下拉列表,而不是复选框。
另一种选择是使用相同的方法,但在Editor模板中,创建一个隐藏字段,并让复选框事件设置/重置隐藏字段值。我从这个开始,但用户还是更喜欢下拉式方法。
/Views/Shared/EditorTemplates/Boolean.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %>
<%
var items = new List<SelectListItem>();
items.Add(new SelectListItem(){
Text = @"No",
Value = @"false",
Selected = (Model == false)
});
items.Add(new SelectListItem(){
Text = @"Yes",
Value = @"true",
Selected = (Model == true)
});
%>
<%: Html.DropDownList("", items) %>/Views/Shared/EditorTemplates/Boolean.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %>
<%: Model ? @"Yes" : @"No" %>https://stackoverflow.com/questions/3652238
复制相似问题