2

Ajax.BeginForm(MVC3、邪魔にならない)に完全なポストバックを強制するにはどうすればよいですか?

MVC2では、「onclick」ハンドラーと「onsubmit」ハンドラーをクリアしました。MVC3でこれを行うにはどうすればよいですか?

//does not work in MVC 3 with unobtrusive ajax :((
$('#myForm').unbind('click');
$('#myForm').unbind('submit');

PS。興味のある方のために、ファイルのアップロードにこれが必要です。ファイルがアップロードされていない場合-ajaxは問題ありません。ファイルがアップロードされている場合は、完全なポストバックを実行させます。

アップデート:

「jquery.unobtrusive-ajax.js」のソースコードを見た後、私はこれを見ました:

$("form[data-ajax=true]").live("submit", blahblah);

だから私はこれを思いついた、そしてそれはうまくいく:

$("form[data-ajax=true]").die("submit");

しかし、これは少し「ハッキー」なように見えます。フォームからすべての送信中のイベントをクリアする「正当な」方法はありますか?更新された質問は次のようになっていると思います。別のセレクターを使用する「die」ステートメントを使用して「ライブ」イベントハンドラーをクリアするにはどうすればよいですか。

4

1 に答える 1

1

目立たないライブラリの変更に問題がない場合は、送信イベントハンドラーでフォームにファイルが含まれているかどうかを確認し、含まれている場合はAJAXを介して完全なPOSTを実行できます。

$("form[data-ajax=true]").live("submit", function (evt) {
    var clickInfo = $(this).data(data_click) || [];
    evt.preventDefault();
    if (!validate(this)) {
      return;
    }

    if ($("input[type=file]", this).val()) {
      this.submit();
    }
    else {
      asyncRequest(this, {
        url: this.action,
        type: this.method || "GET",
        data: clickInfo.concat($(this).serializeArray())
      });
    }
  });
于 2012-06-11T09:46:35.977 に答える