2

私は最近Ajax.BeginForm、ビューを返すときに MVC が奇妙な動作をしていることに気付きました。最初はすべて問題ないように見えましたが、ドキュメントの準備ができているときに発生するすべてのバインドが失われていることに気付きました。ドキュメントレディが実行されていませんでした。

これが他の場所でも機能することを知っていたので、jquery get で同じことを行うと、ドキュメントの実行準備が整っていることがわかりました。しかし、私が理解できる限り、2 つの方法は基本的に同じことを行っています。私の簡単な修正は、ヘルパーの Replace TargetId 実装を取り除き、それを使用しAjaxOptions.OnSuccessて実装を呼び出すことjquery.get()でした。

しかし、 を使用するとドキュメントの準備完了が発生し、を使用して を置き換えたjquery.get()場合ではないのはなぜですか?Ajax.BeginFormdiv


// This method returns a the partial view from DoSomething, but DOES NOT execute the 
// partial view's document.ready
using (Ajax.BeginForm("DoSomething", "Somewhere", new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "demo" }))
{ %>
    <div id="demo"></div>
<% } %>

例 1. div を置き換える MVC ヘルパー メソッド


// This method returns nothing from DoSomething, calls getSomething onSuccess and DOES 
// execute the partial view's document.ready
using (Ajax.BeginForm("DoSomething", "Somewhere", new AjaxOptions { HttpMethod = "Post", OnSuccess = "function() { getSomething(); }" }))
{ %>
    <div id="demo"></div>
<% } %>

// this being the simplified js function
function getSomething(){
    var $targetDiv = $("#demo");
    var url = "<%: Url.Action("LoadSomething", "Somewhere")  %>";
    $.get(url, { }, function (result) { $targetDiv.html(result) });
});

例 2. div を置き換える jquery.get() メソッド

4

1 に答える 1

2

Ajax.BeginForm のような JavaScript コードを使用せずに、より柔軟でカスタマイズ可能なリッチ アプリケーションを構築する別の方法を提案できます。

サンプル: コントローラーから html を取得し、dom 要素に挿入します。

<div id="containerId"></div>
 @(Html.When(JqueryBind.Click)
       .Do()
       .AjaxGet(Url.Action("GetContent", "SomeController"))
       .OnSuccess(dsl => dsl.With(r=> r.Id("containerId"))
                            .Core()
                            .Insert
                            .Html())
       .AsHtmlAttributes()
       .ToButton("Insert button"))

次のようなリクエストに任意のdom値を使用します

AjaxGet(Url.Action("GetContent", "SomeController",new 
                                       {
                                         Criterie=Selector.Jquery.Name("txtName")
                                        } ))

公式ドキュメントでサンプルを参照したり、github からサンプル プロジェクトのサンプルをダウンロードしたりできます。

于 2013-09-22T07:22:37.797 に答える