質問

OnLoad of the Bodyを使用して実行する必要があるJavaScriptを含むマスターページを使用するビューがあります。特定のビューに対してのみMasterPageでOnLoadを設定する最良の方法は何ですか?

私が試したアイデアは、javascript関数の名前をViewDataとして渡すことでした。しかし、私は本当にコントローラーがページ上のjavascriptについて知る必要はありません。私はこのアプローチが本当に好きではありません...

<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />

編集-代わりにjQueryのdocument readyイベントを使用するという考えがあると思います...

その他のアイデア?

役に立ちましたか?

解決

現在のMVCプロジェクトで次のパターンを使用していますが、これまでの.jsの作業ではかなりうまく機能しているようです...

マスターページ内で、すべてのコンテンツページで使用する標準スクリプトファイル(jquery.js、global.js、jquery-plugins、.cssファイルなど)をロードします。次に、マスターページで必要なイベント(onLoad、onSaveなど)を定義します。作成する各コンテンツページには、独自の.jsファイルが関連付けられ、そのスクリプトファイルをコンテンツ.aspxページ内に読み込みます。コンテンツページ間で異なる実装が必要な.jsイベントは、個々のコンテンツ.jsファイル内で処理されます。したがって、基本的に私のマスターページには、コンテンツページスクリプトが実装する.js関数のセットがあります。今のところ、これらのテンプレート.js関数のシグネチャをファイルに保存し、作成する必要があるすべての新しいcontent.jsファイルにコピーして貼り付けます。ただし、作成する必要のある新しい.jsファイルでこれらのテンプレートシグネチャを吐き出すコードジェネレーターまたはツールを構築することを考えています(.jsに何らかのインターフェイス機能または継承機能がある場合はお知らせします)。

要約すると:

MasterPage.Master Loads:jquery.js、global.js、plugins.js

ContentPageの読み込み:ContentPage.js

Global.jsには、他のグローバルルーチン関数とともにコンテンツページ間で変更されないマスターページが呼び出す関数が含まれています。

各ContentPage.jsは、コンテンツページ用に独自の機能を実装し、マスターページがさまざまな動作を持つ機能を呼び出します。

他のヒント

JQueryは正式にASP.NET MVCの一部になったので、使用することをお勧めします。それは小さく、アプリケーションに膨大な価値を追加します。

Intellisenseのコメントが含まれているMustafa版のJQueryを追加することをお勧めします。

jquery-1.2.6-intellisense。 js

次に、それをScriptsフォルダー(MVC Beta 1の新機能)に追加し、次のように参照します。

<script language="javascript" type="text/javascript" src="../../Scripts/jquery-1.2.6-intellisense.js"></script> 

コードに次のような関数を追加できます:

$(document).ready(function() {
   // do stuff when DOM is ready
});

特定のビューでのみ発生させることを述べたので、次のようにマスターページにプレースホルダーを追加できます。

<asp:contentplaceholder id="JavascriptPlaceholder" runat="server"></asp:contentplaceholder>  

ビューで、そこにコードを配置するかどうかを選択できます。

これはヘッドセクションの内側になります

ブログからのソリューション:使用ASP.net 2.0 MasterPagesでのボディオンロード

MasterPage.master

<head>
<asp:ContentPlaceHolder runat="server" id="Headers">
</asp:ContentPlaceHolder>
<script language=javascript>
   function mp_onload() {
     if(window.body_onload != null)
     window.body_onload();
   }
</script>
</head>
<body onload="mp_onload();">

Default.aspx

<asp:Content ID="Content2" ContentPlaceHolderID="Headers" Runat="Server">
<script language="javascript">
   function body_onload()
   {
       //do something
   }
</script>
</asp:Content>
 

間違いなくjQueryまたは別のJavaScriptフレームワークを使用する必要があります。

コントローラーがビューに何らかのステータスインジケーターを渡すようにしますが、JavaScript関数の名前などのビュー固有のものは渡しません。ステータスインジケータをJavaScript関数名にマップするかどうかはビュー次第です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top