首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC2HTML CheckBox客户端验证

问MVC2HTML CheckBox客户端验证
EN

Stack Overflow用户
提问于 2010-09-06 22:31:07
回答 1查看 1.4K关注 0票数 1

这可能很简单,但却让我抓狂。我到处寻找这一点,发现有人提到了它,但没有提供解决方案。

我有一个简单的视图模型,它有一个布尔属性,没有数据注释,其他属性有,但这些都不会影响问题。

代码语言:javascript
复制
Public Property AcceptSurvey As Boolean

我有一个强类型的视图,这个模型可以很好地用于服务器验证(即所有其他验证都可以很好地工作,并且AcceptSurvey是可选的)。

代码语言:javascript
复制
<%: Html.CheckBoxFor(Function(x) x.AcceptSurvey)%>

当我启用客户端验证时,在提交表单时(未选中AcceptSurvey ),我收到消息“AcceptSurvey字段是必需的。”我认为这是因为当复选框被选中时,验证只看到一个值(true)。我意识到CheckBoxFor帮助器呈现了一个隐藏字段(相同的名称属性和值为false),并认为这是为了解决这个问题。

如果我将属性设置为可空,我就不能使用CheckBoxFor,我可以使用EditorFor,但这将呈现为一个包含三个属性(不是我想要的)的下拉列表,并且客户端验证工作正常。

我是不是太傻了?顺便说一句,我在客户端使用MVC JQuery。

EN

回答 1

Stack Overflow用户

发布于 2010-10-11 00:24:33

我不知道这是一个多好的答案,但它对我很有效。

我使用的是MVC2.0,因此我为Boolean数据类型创建了共享显示和编辑器模板。我将布尔值显示为一个有两个选项的下拉列表,而不是复选框。

另一种选择是使用相同的方法,但在Editor模板中,创建一个隐藏字段,并让复选框事件设置/重置隐藏字段值。我从这个开始,但用户还是更喜欢下拉式方法。

/Views/Shared/EditorTemplates/Boolean.ascx

代码语言:javascript
复制
<%@ 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

代码语言:javascript
复制
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Boolean>" %>
<%: Model ? @"Yes" : @"No" %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3652238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档