2013-01-22 4 views
7

私はこの質問を、MVCにとって非常に新しいことを念頭に置いて説明します。MVC Asp.netで部分表示をレンダリングした後で、javascript関数を起動することは可能ですか?

私は、部分的なビューでグリッドを描写しているインスタンスがあります。

@Html.Partial("MyGridPartial", Model) 

この部分ビューレンダリングによってモデルが作成された時点で、javascript関数を開始する必要があります。私はこれを使ってこれを試みました。 :

settings.ClientSideEvents.EndCallback 

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

+0

あなたは彼HTMLの半分がレンダリングされるときに、サーバー上でJavaScriptを実行する」という意味しますか? " –

+0

基本的には、パーシャルビューがレンダリングされた後、クライアント側の部分ビューによって提供されるデータ(モデル)にアクセスする必要があります。私はモデルに対して操作を実行するいくつかのクライアント側のコードを実行できるように、javascript関数を起動するためにさまざまな方法を試しましたが、私が行ったすべての試みはひどく失敗しました。 –

答えて

5

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

理由は、親ビューがレンダリングされる前にパーシャルが文字列に変換されるためです。その時点で、あなたのマークアップのどれもがブラウザから見られていないので、jscriptは読み込まれていません。

があれば、他の一方で、あなたはjQueryの準備機能で部分的にレンダリングされた:私はあなたが(アクションメソッドによって呼び出される部分)部分的なアクションを使用する必要があると思う

$(document).ready(function() {

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

と任意のJScriptの/ jqueryの関数が用意シリーズの中に呼び出すことができるフォローアップ:アクションパーシャルは、URLを(安らか)を参照して、jQueryの準備関数内で呼び出すことができます。

アクションパーシャルのもう1つの利点は、モデルがアクションメソッド内で形成され、必要なものに文脈的に(理想的にはIDを渡して)ヒンジで作成できることです。

+0

どちらも正しい、私はついにそれを働かせましたが、私は上記の答えの両方とは違ったやり方でやりました。 –

+4

@ UserSmith、どうやって実装したのですか? –

6

PartialViewの場合は、サーバー上のビューでレンダリングしているので、Daveの方法が最も効果的です。コードをDOM準備完了イベントに配線するだけです。

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

か、速記のバージョンをprever場合...

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

あなたは、同じ方法で動作するAjaxを介してロードされている部分図をレンダリングしている場合。 jQueryは、Ajaxを介してクライアントに渡されたhtmlのjavascriptを実行します。これは、正しくリコールすれば、DOMにアタッチされた後です(これをテストすることは自由です。DOMにアタッチされたメモリを試してみます。 load()メソッドの機能です)、実行するjavascriptが応答にあると仮定します。親ページにAjaxリクエストを送信している場合は、完全なイベントに接続することをお勧めします。

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

は私にとって​​コールで使用されるURLは、またのオプションがあり

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

サーバー上UrlHelperを使用して解決された(私はここでは、クライアント側のパラメータを移入しています) Unobtrusive Ajaxを使用してこれに似た何かをしてください。私はそこには、それが終了していますときに呼び出すHTMLやメソッドを受信する要素以外のAjaxOptionsに設定できる複数のプロパティがあるが、私は見つける

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

を(私はここでは、サーバー側のパラメータを移入しています) 「共有のJavaScriptファイルで定義されたLLの再利用機能と彼らはすでにそこから移入されていない場合にのみ、それらを取り込み、このような何か...

$("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"); 
}); 
+0

どちらも正しく、私はついにそれを稼働させましたが、私は上記の答えの両方と違ってやりました –

+3

@UserSmithもあなたのソリューションを親切にポストします –

+0

残念ながら、私はDevexpressを使用しなくなりました。どこでも。上のDanは同じことをしばらく聞いていましたが、私はプロジェクト全体を実装する全く別の道を歩んでいました。私はダンに返信するつもりだったが、実行する必要があるコーディングの山の中でトラックを失った。 –

関連する問題