2

Helpers.cshtmlファイルには多くのHTMLヘルパーがありますが、ヘルパー(html)の中にはjqueryアクションが必要なものがあります。どうすればhelpers.cshtmlのjquery、それは可能ですか?ASP.NET MVC 3でのHTMLヘルパーJavascriptアクションのあるもの

jsファイルをヘッダーまたは特定のページに保存することはできますが、そのようにしたくないことがわかります。特定のヘルパーを読み込んだページでのみjqueryまたはjavascriptを使用します。

誰もがこれについて考えていますか? 私のシナリオは、ヘルパーから正しくロードされているリストボックスコントロールがありますが、カスタムテーマをリストボックスに適用する必要があります。

リトルよりクラリティ

//in index.cshtml 
@Helpers.testListBox("mylist" "1,2,3,4,5,6,7") 


//in Helpers.cshtml 
@helper testListBox(string listName, string listData){ 

    //...... HTML code ......... 

    //Javascript here? 

} 
+0

私はこれのファンではありませんが、私は人々が[スクリプトマネージャ](http://pietschsoft.com/post/2009/08/13/Simple-ScriptManager-for-ASPNET- MVC.aspx)。控えめなJavascriptははるかにクリーンなアプローチです。 –

答えて

5

、フレームワークは、(1回)Javascriptを自動的に含めることができます。 ASP.Net MVCにはそのような機能はありません。これはあなたの欠けているようなものですね。

それを行う方法は、クライアント上です。 RequireJSをhttp://requirejs.org/に見てください。これは、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のスクリプトを必要とします:

あなたの例を使用して、あなたがこのマークアップを持っているとしましょう。 require機能は、それがすでにロードされている場合を除き、jQueryのをロードして、あなたのコードを実行します

// HTML for list box here 

<script type="text/javascript> 
require(['jquery'], function($) { 
    // Do your jQuery coding here: 
    $("myList").doSomething().whatever(); 
}); 
</script> 

:あなたはこれをレンダリングします。 jQueryのスニペットは、HTMLヘルパーの使用ごとに1回繰り返されますが、それは大きな問題ではありません。そのコードは短くする必要があります。

RequireJSは依存関係を効果的に管理します。モジュールAとモジュールBをAに、モジュールCをBに依存させることができます。クライアントコードがモジュールCを要求すると、AとBはCとともに正しい順序で一度だけ読み込まれます各。さらに、require.jsの初期ロードを除いて、スクリプトは非同期にロードされるため、スクリプトの読み込みによってページのレンダリングが遅れることはありません。

ウェブサーバーにサイトを展開するときには、Javascriptファイル間の依存関係を調べ、1つまたは少数のファイルに結合して最小化するツールがあります。あなたのマークアップはまったく変更する必要はありません。開発中は、簡単なデバッグのために小さなモジュール式のJavascriptファイルを多数使用して作業することができます。展開すると、それらが結合され、効率が最小限に抑えられます。

これは、Webフォームフレームワークよりもはるかに優れており、完全にクライアントサイドであり、私の意見ではそれが属する場所です。

+0

ちょっとカール、あなたはアプローチは本当に良い、これは私が期待していたもの、グレートアンサー、ありがとう。私はこのアイデアを試してみましょう! – manny

0

あなたはヘルパー本体に<script>タグを置くことができます。部分図の例については、どのようにこの程度

+0

どうすればいいか教えてください。 – gdoron

+1

@gdoron:他のタグと同じ方法です。 – SLaks

+1

これはヘルパーの中で

  • 11. Html.Editor()ヘルパーは私のASP.NET MVC 3アプリケーションでモデル
  • 12. ASP.NET MVC 3サイトでJavaScript
  • 13. asp.net mvc 4 htmlヘルパーにhtmlクラスを追加するには?
  • 14. asp.net mvc 4カミソリのカスタムHtmlヘルパーから属性にアクセスする
  • 15. ASP.NET MVCのHTMLヘルパーからデフォルトのID属性を削除
  • 16. MVC metatdataproviderとhtmlヘルパー
  • 17. ミキシングC#とHTMLヘルパーは、ASP.NET MVC 6(ASP.NETコア)
  • 18. htmlヘルパーの電子メールの検証 - ASP.Net
  • 19. ASP.NET MVC 2条件文の中にhtmlヘルパーを呼び出す
  • 20. htmlヘルパーASP.NET言語MVCドロップダウンリスト(VB言語の.aspx)
  • 21. ASP.NET MVC 3 HiddenFor Javascriptを
  • 22. ASP.NET MVC Htmlヘルパーは子孫クラスで動作できますか?
  • 23. HtmlヘルパーはASP.NET MVCコントローラで利用できますか?
  • 24. ASP.NET MVCの別のヘルパーの種類
  • 25. ASP.Net MVC 3カスタムHTMLヘルパー - リストをオブジェクトリテラル表記を使用してヘルパーに渡す方法
  • 26. MVC 3 HTMLヘルパーでWebフォームコントロールをラップすることはできますか?
  • 27. のPOSTアクションでURLを取得ASP.NET MVC 3
  • 28. url.Action(コントローラ、アクションは)私のASP.NET MVC 3では
  • 29. ASP.NET MVC 3は、Asp.net MVC 3ではデータベース
  • 30. ASP.NET MVC HTMLヘルパー - Response.Writeが必要ですか?