【问题标题】:MVC 2 Html CheckBox Client-Side ValidationMVC 2 Html CheckBox 客户端验证
【发布时间】:2010-09-06 14:31:06
【问题描述】:

这可能很简单,但一直让我发疯。我到处搜索,发现有人提到它但没有提供解决方案。

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

Public Property AcceptSurvey As Boolean

我有一个对该模型进行强类型化的视图,该模型适用于服务器验证(即所有其他验证工作正常,AcceptSurvey 是可选的)。

<%: Html.CheckBoxFor(Function(x) x.AcceptSurvey)%>

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

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

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

【问题讨论】:

    标签: jquery validation asp.net-mvc-2 checkbox


    【解决方案1】:

    我不知道这是一个多么棒的答案,但它对我有用。

    我正在使用 MVC 2.0,因此我为布尔数据类型创建了共享的显示和编辑器模板。我将布尔值显示为一个二选下拉菜单,而不是一个复选框。

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

    /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" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 2010-09-14
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多