私は最近Ajax.BeginForm
、ビューを返すときに MVC が奇妙な動作をしていることに気付きました。最初はすべて問題ないように見えましたが、ドキュメントの準備ができているときに発生するすべてのバインドが失われていることに気付きました。ドキュメントレディが実行されていませんでした。
これが他の場所でも機能することを知っていたので、jquery get で同じことを行うと、ドキュメントの実行準備が整っていることがわかりました。しかし、私が理解できる限り、2 つの方法は基本的に同じことを行っています。私の簡単な修正は、ヘルパーの Replace TargetId 実装を取り除き、それを使用しAjaxOptions.OnSuccess
て実装を呼び出すことjquery.get()
でした。
しかし、 を使用するとドキュメントの準備完了が発生し、を使用して を置き換えたjquery.get()
場合ではないのはなぜですか?Ajax.BeginForm
div
// 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() メソッド