2012-10-09 61 views
0

我正在使用Ajax.BeginForm进行不显眼的验证。我想让用户选择使用最少数量的验证字段(可能为零)来保存数据,但允许一些必填字段在空时保存。MVC3 Ajax.BeginForm在验证之前挂钩提交事件

我觉得我的要求是:

  • 添加事件处理程序的提交按钮
  • 执行验证手动
  • 识别哪个领域都无法通过验证,因为它们是空
  • 识别哪些领域验证失败,数据出错

我可以捕获提交事件并通过在“文件准备”

$(document).ready(function() { 

    $('#submit-11').click(function() { 
     if (!$("#form0").valid()) { 
      alert("woops"); 
      return false; 
     } 
     return true; 
    }); 

我的问题添加下面的验证表单现在是如何识别哪些字段已验证失败并未能原因。

我可以找到关于谷歌没有什么(虽然这可能是我的搜索技能的功能,而不是问题。)提前

感谢。

回答

1

您试过

event.preventDefault();

刚刚提交点击后? http://api.jquery.com/event.preventDefault/

现在关于你的大问题。我认为你可以做到这一切与jQuery 这里是一个例子

$(document).ready(function() { 
    //form validation rules, including custom rules you'd like 
    $("#form").validate({ 
     rules: { 
      fieldOne: { required: true }, 
      fieldTwo: { required: function() { /*custom validation*/return true; } } 
     }, 
     messages: { 
      fieldOne: { required: "error" }, 
      fieldTwo: { required: "error" } 
     } 
    }); 
    //handle submit click 
    $("#btnSubmit").click(function (event) { 
     event.preventDefault(); //stops form from submitting immediately 
     if ($("#form").valid()) { //perform validation 
      //submit your data if valid 
      $.post("/your/action", $form.serialize(), function (data) { 
       //do something with the result 
      }); 
     } 
    }); 

}); 

UPDATE: 因此,也许你应该这样做,当你添加的验证处理程序的形式,你可以实现submitHandler和invalidHandler。 现在你真的应该看的是invalidHandler

 $(document).ready(function(){ 
      $("#form").validate({ 
       rules : { 
        field : {required : true}     
       }, 
       messages : { 
        field : {required : ""}     
       }, 
       submitHandler: function(form) {      
        form.submit(); //if all is good 
       }, 
       invalidHandler: function(form, validator){ 
        console.log(validator.errorList); //if something went wrong 
       } 
      }); 

这个函数接收这反过来具有包含失败的所有字段(和消息)的errorList验证。 例如,使用chrome的开发人员工具测试此代码,然后您将看到errorList中的内容。

+0

感谢您的提示。我已经提出了我的问题,因为封闭部分仍在困扰着我。 –

+0

@PeterSmith看看是否适合你 – coffeeyesplease