9

この質問の前に、私はMVCに非常に慣れていないという事実を述べさせてください。

部分ビューでdevexpressグリッドをレンダリングしているインスタンスがあります。

@Html.Partial("MyGridPartial", Model)

この部分ビューレンダリングを介してモデルにデータが入力された時点で、JavaScript関数を開始する必要があります。私はこれを介してこれを行おうとしました。:

settings.ClientSideEvents.EndCallback

この時点に到達することはできますが、その時点ではモデル自体にデータが入力されていないため、うまくいきません。クライアントサイドのJavaScriptコードにジャンプするために、部分的なビューレンダリングをキック/アタッチする一般的な方法を誰かが知っているかどうか疑問に思いました。

4

2 に答える 2

8

サーバー上のビューでレンダリングしているPartialViewの場合は、Daveの方法が最適です。コードをDOMreadyイベントに接続するだけです。

$(document).ready(function(){
    //Javascript logic to fire goes here
});

または、速記バージョンを使用する場合...

$(function(){
    //Javascript logic to fire goes here
});

Ajaxを介してロードされている部分ビューをレンダリングしている場合は、同じ方法が機能します。jQueryは、正しく思い出せば、DOMに接続されるとAjaxを介してクライアントに返されるhtmlでjavascriptを実行します(これをテストしてみてください。DOMに接続されると起動することについてメモリを調べますが、これは信じていますはload()メソッドの機能です)、実行するjavascriptが応答に含まれていると仮定します。Ajaxリクエストを送信する親ページにある場合は、完全なイベントに接続するのが最善の策です。(ここではクライアント側にパラメーターを入力しています)

$("#wrapperAwaitingContent").load("/Grids/MyGridPartial", {id: null /*parameters*/}, function(text, status, xhr){
    //Javascript logic to fire goes here
});

私の場合、.load()呼び出しで使用されるURLは、サーバー上のUrlHelperを使用して解決されます

$("#wrapperAwaitingContent").load("@Url.Action("MyGridPartial", "Grids")", {id: null /*parameters*/}, function(text, status, xhr){
    //Javascript logic to fire goes here
});

Unobtrusive Ajaxを使用して、これと同様のことを行うオプションもあります。(ここではサーバー側にパラメーターを入力しています)

@Ajax.ActionLink("Load Data", "MyGridPartial", "Grids", new { id = null/*parameters*/ }, new AjaxOptions() { UpdateTargetId = "wrapperAwaitingContent", OnComplete="onCompleteMethodName" })

HTMLを受け取る要素と終了時に呼び出すメソッド以外にAjaxOptionsに設定できるプロパティは他にもありますが、共有JavaScriptファイルで定義された関数を再利用し、まだ入力されていない場合にのみ入力します。そこから、このようなもの...

$("a[data-ajax='true']").each(function () {
    var ajaxUpdate = $(this).closest("data-ajax-container");
    $(this).attr("data-ajax-update", $(this).attr("data-ajax-update") ? $(this).attr("data-ajax-update") : ajaxUpdate);
    $(this).attr("data-ajax-mode", $(this).attr("data-ajax-mode") ? $(this).attr("data-ajax-mode") : "replace");
    $(this).attr("data-ajax-success", $(this).attr("data-ajax-success") ? $(this).attr("data-ajax-success") : "AjaxSuccess");
    $(this).attr("data-ajax-complete", $(this).attr("data-ajax-complete") ? $(this).attr("data-ajax-complete") : "AjaxComplete");
    $(this).attr("data-ajax-failure", $(this).attr("data-ajax-error") ? $(this).attr("data-ajax-error") : "AjaxError");
});
于 2013-01-23T00:47:39.593 に答える
5

レンダリングされるビューの通常のフローの一部としてこの部分をレンダリングする場合、答えは「いいえ」です。

この理由は、親ビューがレンダリングされる前に、Partialが文字列に変換されるためです。その時点では、マークアップはブラウザに表示されておらず、jscriptも読み取られていません。

一方、JQueryReady関数でパーシャルをレンダリングした場合:

$(document).ready(function() {

アクションパーシャル(アクションメソッドによって呼び出されるパーシャル)を使用する必要があると思います。アクションパーシャルは、URLを(安らかに)参照することにより、JQueryReady関数内で呼び出すことができます。

$('#divMyGridPartial').load('/Grids/MyGridPartial/{id}');

また、フォローアップのjscript / jquery関数は、readyシリーズ内で呼び出すことができます。

アクションパーシャルのもう1つの利点は、モデルがアクションメソッド内に形成され、必要に応じてコンテキストで作成できることです(理想的には、渡されたIDを無効にします)。

于 2013-01-23T00:04:23.207 に答える