4

私はMVCについて少し学ぶことに興味のあるWebフォームプログラマーです。ページヘッダーに直接アクセスしてそこに何かを書き込むことができるWebコントロールのスイート全体を作成しました。たとえば、日付ピッカー機能を備えたテキストボックスをレンダリングするコントロールがある場合、必要なJavaScriptファイルとCSSファイルへのリンクを自動的に追加するためにページヘッダーにアクセスできます。必要なリンクファイルについて考えるのが面倒なので、これが大好きです。怠惰なプログラマーは良いプログラマーですよね?

私の質問は、MVCでこれを行う方法はありますか?つまり、カスタムHtmlHelper(たとえば)を作成するには、ページにコントロールマークアップをレンダリングするだけでなく、必要なスクリプトとリンクタグをページヘッダーにレンダリングできますか?

4

4 に答える 4

4

_Layout.cshtml(基本的にマスターページ)でMVC3を使用すると、@Render.Partial("Header", required: false)

その後、ビューで名前付きセクションを使用できます。

@section Header {
    @{ Html.MyHelper.GetResources(); }
}

@Html.MyHelper.DoSomething()

これによりrequired: false、ビューにヘッダーの名前付きセクションがない場合、MVC3 はエラーになりません。すべてのページに名前付きセクション (パンくずなど) を含める必要がある場合はrequired: true(これがデフォルト)、ビューにセクションがない場合@section Headerはエラーになります。

于 2011-03-18T12:39:03.820 に答える
0

はい、- Telerik は、そのレジストラScriptRegistrarでこれを行うのに優れた仕事をしています。Stylesheet良い出発点は、Web アセットのドキュメントです。

于 2011-03-18T12:52:04.870 に答える
0

Web フォームには、ページ オブジェクトを取得して操作するカスタム サーバー コントロールがありますか? Asp.net mvc には、サーバー コントロールと Page オブジェクトがありません。

私にとっては、そのような方法でリソースをリンクするのは悪い考えです-クライアント最適化のベストプラクティスでは、リソースのサーバーへのリクエストの数を最小限に抑えます. YSlow をダウンロードして、サイトのパフォーマンスを向上させることができます。

ただし、必要に応じて、拡張メソッドを作成してビューで使用するか、actionfilterattribute を作成して、いくつかの URL 文字列を設定することができます。

于 2011-03-18T12:45:13.473 に答える
-1

一種のスクリプトマネージャー

私はあなたの問題に部分的に関連しているインターネット上のこのリソースを見つけました、そしてこの点でできることが最も多いかもしれません。

このソリューションは実際には要素でレンダリングされませんが、HEAD部分ビュー内からスクリプトを1回だけ追加し、メインビューでレンダリングするのに役立ちます。したがって、部分ビュースクリプトについて心配する必要はありません。彼らは自分たちの面倒を見るでしょう(つまり、よりカプセル化されています)

ASP.NETMVC用のシンプルなScriptManager

カスタムビューエンジンアプローチ

しかし、そうでなければ、参照を辞書に保存して(上のリンクと同様に)、最後のレンダリングスクリプト参照で頭の部分をレンダリングする独自のビューエンジンを使用することで可能になると思います。

カスタムViewPageクラスアプローチ

ビューと部分ビューの獲得したクラスを作成することもできます。このようにして、ある種の辞書を再び使用するビューのレンダリング方法を変更できます。Htmlヘルパー拡張メソッドを使用してその辞書に入力するかViewUserControl、この種の機能を持つカスタムクラスを作成できます。

3つのうち、最後の1つが最も単純で、HEAD要素内に書き込むことができると思います。リソースの結合を行う機能を提供することもできます。

于 2011-03-18T13:02:03.490 に答える