Asp.net MVCマスターページでボディのOnLoad属性を設定する
-
03-07-2019 - |
質問
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を追加することをお勧めします。
次に、それを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関数名にマップするかどうかはビュー次第です。