MVC3 Ajax.BeginForm在验证之前挂钩提交事件

时间:2012-10-09 13:28:05

标签: asp.net-mvc form-submit unobtrusive-validation

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

我认为我的要求是:

  • 向提交按钮添加事件处理程序
  • 手动执行验证
  • 确定哪些字段验证失败,因为它们是空的
  • 确定哪些字段验证数据失败

我可以通过在“document ready”

中添加以下内容来捕获提交事件并验证表单
$(document).ready(function () {

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

我现在的问题是如何识别哪些字段验证失败以及失败的原因。

我在谷歌上找不到任何东西(虽然这可能是我的搜索技能而不是问题的函数。)

提前致谢。

1 个答案:

答案 0 :(得分: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
            });
        }
    });

});

更新: 所以也许你应该这样做,当你将validate处理程序添加到表单时,你可以实现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中的内容。