0

Ajax.BeginFormヘルパーを使用しています。うまく機能しますが、小さな問題があります。

コードは次のとおりです。

<div class="row" id="pdiv">
@using (Ajax.BeginForm("SomeAction","SomeController",new AjaxOptions{UpdateTargetId="pdiv"}))
{
.....
}
</div>

UpdateTargetId を「pid」に設定しました。

したがって、最初にレンダリングされた HTML は次のようになります。

<div class="row" id="pdiv">
<form action="/SomeController/SomeAction" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#pdiv" id="form0" method="post">
....

送信すると、pid div全体がpid内に配置されます。すなわち

<div class="row" id="pdiv">
    <div class="row" id="pdiv">
    <form action="/SomeController/SomeAction" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#pdiv" id="form0" method="post">
    .....
    }

Ajaxオプションを設定しようとしましたがInsertionMode= InsertionMode.Replace 、成功しませんでした。「pdiv」を新しく取得したコンテンツに完全に置き換える方法はありますか?

4

2 に答える 2

1

サイモンによるStackOverflowのこの投稿によると

さて、しばらくして同じ問題に遭遇したので、それを明確にしたかったので、jquery.unobtrusive-ajax.js と責任のある関数を調べました。

function asyncOnSuccess(element, data, contentType) {
    var mode;

    if (contentType.indexOf("application/x-javascript") !== -1) {  // jQuery already executes JavaScript for us
        return;
    }

    mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
    $(element.getAttribute("data-ajax-update")).each(function (i, update) {
        var top;
        switch (mode) {
            case "BEFORE":
                top = update.firstChild;
                $("<div />").html(data).contents().each(function () {
                    update.insertBefore(this, top);
                });
                break;
            case "AFTER":
                $("<div />").html(data).contents().each(function () {
                    update.appendChild(this);
                });
                break;
            default:
                // Changed this line because of generating duplicate IDs
                //$(update).html(data);
                $(update).html($(data).html());
                break;
        }
    });
}

デフォルトの部分でわかるように、答えは updatetargetid を置き換えるのではなく、その内容を答えに置き換えました。今、私は答えの内側の部分を取り、すべてがうまくいきます!

于 2014-01-31T11:37:20.543 に答える
1

ajax フォーム マークアップを別のビューに移動する必要があるため、ターゲット ID で指定した div 要素が含まれないようにするには、ajax アクションからその新しい部分ビューをサーバーする必要があります。

于 2014-01-31T11:33:56.553 に答える