Webフォームを使用すると、特定のサーバーコントロールがページで使用されたときに、フレームワークにJavascriptを(1回)自動的に含めることができます。ASP.NetMVCにはそのような機能はありません。これがあなたが見逃しているもののように聞こえます。
それを行う方法はクライアントにあります。http://requirejs.org/でRequireJSを見てください。これは、Javascriptの依存関係を管理するためのクライアント側のライブラリです。これはWebフォームが行ったことを実行しますが、より優れており、さらに多くのことを実行します。マスターレイアウトには、次のようなスクリプトタグがあります。
<script src="/Scripts/require.js" type="text/javascript" data-main="/Scripts/main"></script>
これは、すべてのページに含める唯一のスクリプトタグにすることができます。それ以外はすべて、RequireJSで必要な場合にのみ動的にロードできます。これをすべてのページにロードするのは事実ですが、jQueryよりも小さく、多くのことを実行できるため、その地位を獲得しています。
あなたの例を使用して、あなたがこのマークアップを持っているとしましょう:
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7")
HTMLをレンダリングし、jQueryスクリプトが必要です。これをレンダリングします:
// HTML for list box here
<script type="text/javascript>
require(['jquery'], function($) {
// Do your jQuery coding here:
$("myList").doSomething().whatever();
});
</script>
関数は、require
jQueryが既にロードされていない限り、jQueryをロードしてから、コードを実行します。jQueryスニペットがHTMLヘルパーの使用ごとに1回繰り返されるのは事実ですが、それは大したことではありません。そのコードは短くする必要があります。
RequireJSは依存関係を効果的に管理します。モジュールA、Aに依存するモジュールB、およびBに依存するモジュールCを使用できます。クライアントコードがモジュールCを要求すると、AとBがCとともに、正しい順序で1回だけロードされます。各。さらに、require.jsの初期ロードを除いて、スクリプトは非同期でロードされるため、スクリプトのロードによってページのレンダリングが遅れることはありません。
Webサーバーにサイトをデプロイするときは、Javascriptファイル間の依存関係を調べて、それらを1つまたは少数のファイルに結合し、それらを最小化するツールがあります。マークアップを変更する必要はまったくありません。開発中は、デバッグを容易にするために多数の小さなモジュラーJavascriptファイルを操作できます。デプロイするときは、それらを組み合わせて最小化することで効率を高めます。
これは、Webフォームフレームワークが行ったことよりもはるかに優れており、完全にクライアント側であり、私の意見ではそれが属している場所です。