0

我正在使用 ASP.NET MVC。在我将事件附加到表单的 onSubmit 事件之前,我的验证运行良好。

这是我的表单的外观:

@using (Html.BeginForm("Recover", "Auth", FormMethod.Post, new { Id = "RecForm", onSubmit = "return Events.Submit(this,event)" }))
{
        @Html.TextBoxFor(model => model.Email)
        @Html.ValidationMessageFor(model => model.Email)
        <input type="submit" value="Recover" />
}

Javascript(工作正常,只需将其放在这里,以便您检查其中的某些内容是否导致验证不触发):

//Events
window.Events = (function () {

    // Baseline setup
    var Events = {};

    function disableAllChildren(el) {
        $(el).find(':input').attr('disabled', true);
    }
    function enableAllChildren(el) {
        $(el).find(':input').attr('disabled', false);
    }

    //Ajax submit
    Events.Submit = function (el, event) {
        event.preventDefault();
        //serialize the form before disabling the elements.
        var data = $(el).serialize();

        disableAllChildren(el);
        $(el).find('.success, .error').hide();
        $.ajax({
            url: el.action,
            type: 'POST',
            data: data,
            success: function (data) {
                //Stuff happens.
            }
        });
    };
    return Events;
})(this, this.document);

如何取回我的验证?

4

2 回答 2

3

我所做的是在提交之前检查表格是否有效。请参阅以下代码:

$form = $("#myForm");

if (form.valid()) {

    form.validate();
    //other codes here

 }

如果表格有效,则发布您的数据。如果没有,什么也不做。

于 2011-09-27T07:10:09.813 回答
1

您的代码中存在比验证更多的问题。案例是disabled字段不会发布到服务器。他们也不参与验证。因此,即使您的代码有效,您也不会收到任何发布到服务器端的信息。删除disableAllChildren(el);或重新编码它以不禁字段,但可能使它们只读。

有了这个,他们将得到验证,但在 ajax submit 之后并不奇怪。这是您不希望出现的行为,因此请查看validate method。特别是你应该对它所在的部分感兴趣

有效时通过 Ajax 提交表单。

我相信这种方式验证表单 ajax 提交可以更容易完成。

$(".selector").validate({
   submitHandler: function(form) {
    $(form).ajaxSubmit();
   }
})

或者,只需在 ajax 提交之前添加验证检查

于 2011-09-27T07:17:04.417 回答