質問

以前はWebFormsを使用していたかなり複雑なアプリケーションがあります。私たちは、MVCを使用してその一部をゼロから書き直しています。私たちのアプリケーションはいくつかのウィジェットで構成されており、それらが一緒になってアプリケーションの機能を構成しています。

WebFormsでは、UserControlsを使用しました。各UserControlは、HttpContext.Current.Itemsに格納されたコレクションを使用してCSSとJavaScriptを登録します。そのコレクションは、単一の要求として出力にマージされます。通常、これはPage_Loadイベントで発生し、含まれるページは、そのページに必要なすべてのJavaScriptとCSSを含むスクリプトタグをレンダリングします。

私たちは、MVCで同じことをすることに苦労しています。マスターページ内の多くのビューを使用して、ウィジェットを模倣しています。各ウィジェットには独自のコントローラーがあるため、機能を十分に分離できます。マスターページは、MVC先物のRenderActionを使用してページ上にウィジェットを構築します。もともと、CSS / JSファイルには同じ登録方法を使用していました。各コントローラーは、必要なファイルをアクションに登録します。その後、ファイルはHttpContext.Current.Itemsコレクションに含まれ、ページにレンダリングされます。これを容易にするために、リンク/スクリプトをページにレンダリングするHtmlHelper拡張機能を作成しました。次のようになります。

<%= Html.GetRegisteredCssFiles() %>

問題は、MVCがよりトップダウンのアプローチを使用していることです。この呼び出しはページのタグで行われますが、RenderActionへの後続の呼び出しは以下で発生します。 RenderActionが呼び出され、必要なファイルがHttpContext.Current.Itemsに登録されるまでに、上記のコードは既に実行されています。そのため、コレクションは適切なタイミングで変更されません。

これをどのように構築すべきかについてのアイデアはありますか? MVCのベストプラクティスを取り入れた回答を探しています。

役に立ちましたか?

解決

この質問はかなり前に聞かれたので、おそらくあなたはすでにこれに対処しているでしょう。ただし、将来の訪問者にとっては、このソリューションが役立つかもしれません。 http://marcinbudny.blogspot.com/2010/01/handling -stylesheet-references-in.html

他のヒント

無料のTelerik MVCツールには、スクリプトとスタイルレジスタがあり、必要な処理を実行できます...

これがあなたにとって適切な解決策であるかどうかはわかりませんが、その呼び出しを各ページの一番下に移動してみてください。

私は常にhtml HEADにjavascriptとcssファイルを含めてきたので、それが下位で機能するかどうかわかりません。私の想定では、ほとんどのブラウザで動作するはずですが、いくつかの問題はランダムに発生する可能性があります。

別の方法は、GetRegisteredFiles()に、CSSファイルを適切な場所に読み込むJavaScriptを(DOM操作を介して)出力させることです。

これらのソリューションのいずれかの問題は、ファイルが最後まで含まれないことです。これにより、ページが「プレーン」に見える可能性があります。 CSSがダウンロードされるまで。

代わりに、コントローラーはどの「ウィジェット」を予測することもできます。ロードされ、そのデータをマスターページに渡します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top