MVC 3和JQuery中的手动表单validation

我希望能够在用户选择“GO”按钮时在客户端触发表单validation。 目前,当选择“GO”按钮时,它不会validation完整的表格。 例如,如果我加载表单并选择“Go”按钮而不将焦点放在文本框中,则不会validation任何内容,并且val.Valid()返回true。 如果我在文本框中输入了无效数据,则会对该单个项目进行validation; 当我选择“GO”按钮时,val.Valid()返回false。

所以我想要做的是,当用户选择按钮或其他事件时,我想触发所有表单validation。

我在MVC 3中这样做

public class TestValidationModel { [Required(ErrorMessage="UserName Is Required")] [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")] [StringLength(12, MinimumLength = 3)] public string UserName { get; set; } [Required(ErrorMessage="Password Is Required")] [StringLength(20, MinimumLength = 3)] public string Password { get; set; } [Required(ErrorMessage="Email Address Is Required")] [Display(Name = "Email Address")] public string EmailAddress{ get; set; } }      $(function () { $("#butValidateForm").click(function(){ var val = $('#myForm').validate() alert(val.valid()); }) });  @using (Html.BeginForm("", "", FormMethod.Post, new {id = "myForm"})) { 
@Html.LabelFor(m => m.UserName) @Html.TextBoxFor(m => m.UserName) @Html.ValidationMessageFor(m => m.UserName)
@Html.LabelFor(m => m.Password) @Html.TextBoxFor(m => m.Password) @Html.ValidationMessageFor(m => m.Password)
@Html.LabelFor(m => m.EmailAddress) @Html.TextBoxFor(m => m.EmailAddress) @Html.ValidationMessageFor(m => m.EmailAddress)
}

更新

我想我找到了解决问题的方法。 请参阅下面的showErrors

   $(function () { $("#butValidateForm").click(function () { var val = $('#myForm').validate(); val.showErrors(); //<-- Call showErrors alert(val.valid()); }) });  

以下链接到JQuery表单上的post与我的问题无关,但我能够找到我正在寻找的方法名称。 http://plugins.jquery.com/content/jqueryvalidate-showerrors-issue-form-wizard

如果有人有更好的答案,请提供反馈。


更新

以前的代码在Firefox中有点起作用,但在IE中根本不起作用。 我做了以下操作,现在可以在Firefox中使用,但仍然不在ID中

  $(function () { $("#myForm").submit(function (e) { var val = $('#myForm').validate(); //<--added the semi-colon val.showErrors(); alert(val.valid()); e.preventDefault(); }); }); // $("#butValidateForm").click(function () { // var val = $('#myForm').validate() // val.showErrors(); // alert(val.valid()); // }) }); 

感谢使用jQuery来劫持ASP.NET MVC表单post ,指出我正确的方向。 但仍然不完美

我不知道这是否是最好/最有效的方法,但我是通过在我自己的函数中单独validation每个元素来实现的。

 jQuery(document).ready(function () { $("#butValidateForm").button().click(function () { return IsMyFormValid(); }); $('#myForm').validate(); } function IsMyFormValid() { var isValid = false; isValid = $('#myForm').validate().element($('#UserName ')); isValid = ($('#myForm').validate().element($('#Password '))) ? isValid : false; isValid = ($('#myForm').validate().element($('#EmailAddress'))) ? isValid : false; return isValid; } 

让它自动validation会很棒,但我似乎总是遇到一些奇怪的业务逻辑规则,它不会被通用validation方法所捕获。 这样做可以让我按照我想要的方式控制所有validation,但大部分时间都依赖于内置validation。

  

不确定你是否想出了这个,但我在IE中用$("#myForm").submit遇到了同样的事情$("#myForm").submit 。 使用live

 $("#myForm").live('submit', function (e) { var val = $('#myForm').validate(); //<--added the semi-colon val.showErrors(); alert(val.valid()); e.preventDefault(); }); 

它不能在IE中工作,因为你缺少一个分号:

 var val = $('#myForm').validate()