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 メソッドを見てください。特に気になる部分は

有効な場合、Ajax 経由でフォームを送信します。

私は、検証されたフォームの ajax 送信をより簡単に行うことができると信じています。

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

または、ajax送信の直前に検証チェックを追加するだけです

于 2011-09-27T07:17:04.417 に答える