11

私はMVCに次のような部分的なビューを持っています:

<div id="comments">
    ...
</div>

その div 内には、AJAX を使用してコントローラーを呼び出し、同じ部分ビューを取得するフォームがあります。問題は、ビューを呼び出した結果が div 全体ではなく div の内容を置き換えることであり、最終的には次のようになります。

<div id="comments">
    <div id="comments">
        ...
    </div>
</div>

ASP.Net MVC と AJAX での 1 週間の経験から考えられる唯一の解決策は、div を部分ビューの外側に配置し、部分ビューに内側の部分のみを含めることですが、フォームは外側の id を参照します。フォームが配置されている場所を表示して、そこに残した小さなカプセル化を壊します。より良い解決策はありますか?

4

6 に答える 6

6

.NET MVC 3 に同梱されている目立たない Ajax ライブラリは、jQuery.ajax の 4 つのコールバックに基づくコールバックを使用します。ただし、Ajax.BeginForm メソッドの InsertionMode = InsertionMode.Replace では、jQuery の replaceWith が呼び出されません。代わりに、.html(data) を使用して、(要素自体ではなく) ターゲット要素のコンテンツを置き換えます。

私のブログでこの問題の解決策を説明しました: http://buildingwebapps.blogspot.com/2011/11/jquerys-replacewith-and-using-it-to.html

于 2011-12-14T10:21:36.873 に答える
3

AjaxHelper.Form または jQuery を使用していますか。jQuery を使用している場合は、replaceWith()を使用してみましたか? AjaxHelper を使用していAjaxOptions { InsertionMode = InsertionMode.Replace }ますか? どちらかを使用すると、DIV 全体を部分ビューの結果に置き換えることができると思います。

于 2009-05-31T01:23:20.987 に答える
2

Asp.Net MVC 5 でも同じ問題がありました。

PartialView に、それが含まれている可能性のある div に関する知識を持たせたくなかったので、その回避策を受け入れませんでした。

次に、ReplaceWith を参照している他の回答に気付き、簡単な解決策を見つけました。

InsertionMode = InsertionMode.ReplaceWith

これで、mvc 部分ビューは、外部の名前に依存することなく、完全に ajax ヘルパーに置き換えることができます。

于 2015-01-28T17:20:56.200 に答える
1

jQuery も試してみてください ( MS MVC フォーム AJAXifying テクニックに関する私の回答から):

<script type="text/javascript">
    $(document).ready(function() {
        ajaxify($('div#comments'));
    });

    function ajaxify(divWithForm) {
        var form = $('form', divWithForm);
        $(':submit', form).click(function (event) {
            event.preventDefault();
            $.post(form.attr('action'), form.serialize(),
                function(data, status) {
                    if(status == 'success') {
                        var newDivWithForm = $(data);
                        ajaxify(newDivWithForm);
                        divWithForm.after(newDivWithForm).remove();
                    }
                }
            );
        });
    }
</script>
于 2009-05-31T10:24:15.527 に答える
0

問題を解決しましたか?私は同じ問題を抱えていましたが、これを見つけました:

http://buildingwebapps.blogspot.ro/2011/11/jquerys-replacewith-and-using-it-to.html

お役に立てば幸いです。

于 2012-07-12T11:20:42.310 に答える