12

私はMVCで単純なajaxフォームを持っています。AjaxOptionsには、1つのことを実行する単純なjavascript関数に設定されたOnCompleteがあります-falseを返します。

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" }))

function preventUpdate(xhr) {
    return false;       
}

問題は、そのページがすでに更新されていることです。たとえば、コントローラーがポストバック後に部分ビューを返す場合もあれば、Jsonオブジェクトを返す場合もあります。部分ビューが返されたときにページを更新し、jsonが返されたときにダイアログウィンドウを表示したい。残念ながら、jsonが返されると、MSDNのようにOnComplete関数がfalseを返しても、ページをクリアします(jsonで更新します)。ページの更新をキャンセルするには、JavaScript関数からfalseを返します。

受信した応答に応じてページが更新されないようにするにはどうすればよいですか?

ありがとうございました!

- - - アップデート - - - -

これまでのところ、私は次の解決策を見つけました。UpdateTargetIdを指定しない場合は、必要な応答を手動で実行できます。ただし、falseを返すという動作はまだ文書化されていません。

4

1 に答える 1

23

を使用OnSuccessして取り除きUpdateTargetIdます。このような:

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" }))
{
    ...
}

その後:

function foo(result) {
    if (result.SomePropertyThatExistsInYourJsonObject) {
        // the server returned a JSON object => show the dialog window here
    } else {
        // the server returned a partial view => update the DOM:
        $('#DivFormId').html(result);
    }
}
于 2012-09-25T07:37:50.617 に答える