客户端在使用MVC 2 jQuery验证时验证非模型绑定复选框

时间:2011-01-15 03:58:56

标签: asp.net-mvc jquery-validate

拥有:使用ASP.NET MVC 2,基于DataAnnotationsModel的服务器验证,以及使用jQuery进行客户端验证。我的模型中的任何内容都在客户端上使用基于jQuery的验证(jQuery.validate和MicrosoftMvcJQueryValidation.js)完美验证。

需要:在表单中添加其他HTML <input type="checkbox" id="terms" />。我需要jQuery验证来要求检查此复选框并以某种方式将其与MVC自动控制的任何jQuery客户端脚本挂钩。是的,我知道它不会在服务器端验证,但我不需要或不想它。

似乎应该很简单,但我是MVC的新手,jQuery的初学者,我的搜索空白。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

这是一个解决方案。它模仿mvc挂钩到jQuery验证的功能。所以有一个名为Accept的复选框,它不属于模型。该脚本必须在表单之后,并添加该字段的所有验证元数据。

    <%
        Html.EnableClientValidation(); %>
    <% using(Html.BeginForm("Show"))
{ %>
      <%= Html.EditorForModel() %>
      <div class="editor-field">
        <%= Html.CheckBox("Accept", new { @class = "required" })%> 
        <span class="field-validation-valid" id="Accept_validationMessage"></span>
      </div>
      <input type="submit" value="Submit" />
<%} %>
<script type="text/javascript">
    window.mvcClientValidationMetadata[0].Fields.push({
        FieldName: "Accept",
        ReplaceValidationMessageContents: true,
        ValidationMessageId: "Accept_validationMessage",
        ValidationRules: [{ ErrorMessage: "The Accept field is required.", ValidationType: "required", ValidationParameters: {}}]
    });
</script>

答案 1 :(得分:0)

我可能建议为每个View使用ViewModel(将所有数据注释放在那里)。然后,您可以为复选框创建布尔模型属性,并将其设置为必需。

从那里,如果您将模型发布回控制器,您只需使用AutoMapper将ViewModel映射到所需的模型,或者只是自己映射属性。

无论哪种方式,最好为每个视图使用ViewModel。请记住,ViewModel的工作是尝试包含视图中所需的所有内容。这绝对意味着它可以并且将拥有模型中不需要的其他数据。

答案 2 :(得分:0)

试试这个

$(document).ready(function() {
    //// Assuming your form's ID is 'form0'
    $("#form0").submit(function() {  
        if ($("#terms").attr('checked')) {
            return true;
        }
        else
        {
           //// Error message if any
           return false;
        }
    });
});
相关问题