3

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

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

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

編集 - 代わりに jQuery のドキュメント準備完了イベントを使用するのが 1 つのアイデアだと思います...

他のアイデアはありますか?

4

4 に答える 4

5

ブログからの解決策: ASP.net 2.0 MasterPages で body onload を使用する

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>
 
于 2008-10-31T10:56:45.490 に答える
5

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

Intellisense コメントが含まれているムスタファのバージョンの 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>  

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

ヘッドセクションの内側に入ります

于 2008-10-26T20:45:41.667 に答える
3

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

マスター ページ内に、すべてのコンテンツ ページで使用する標準スクリプト ファイル (jquery.js、global.js、jquery-plugins、.css ファイルなど) をロードします。次に、マスター ページで必要なイベント (onLoad、onSave など) を定義します。作成する各コンテンツ ページには、独自の .js ファイルが関連付けられており、そのスクリプト ファイルをコンテンツ .aspx ページ内に読み込みます。コンテンツ ページ間で異なる方法で実装する必要がある .js イベントは、個々のコンテンツ .js ファイル内で処理されます。基本的に、マスター ページには、コンテンツ ページ スクリプトが実装する .js 関数のセットがあります。現在、これらのテンプレート .js 関数の署名をファイルに保存し、作成する必要があるすべての新しい content.js ファイルにコピー アンド ペーストするだけです。しかし、私は'

要約すると:

MasterPage.Master ロード: jquery.js、global.js、plugins.js

ContentPage ロード: ContentPage.js

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

各 ContentPage.js は、異なる動作を持つマスター ページが呼び出す関数と共に、コンテンツ ページ用の独自の関数を実装します。

于 2008-10-16T03:58:58.577 に答える
0

とにかく、jQuery または別の JavaScript フレームワークを必ず使用する必要があります。

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

于 2008-10-16T02:01:24.210 に答える