ネストされたマスターページにViewDataを割り当てる
-
06-07-2019 - |
質問
ネストされたマスターページにViewDataを割り当てる良い方法はありますか?たとえば、トップレベルのマスターページには、ログインしているユーザーに関する情報があるかもしれません。また、ユーザーが部門ページにいるときに表示されるネストされたマスターページもあります。そのデータは部門のページでのみ利用できるようにします。
だから、これはそれがどのように見えるかです:
Top Level Master Page - Includes ViewData["userData"]
|
|
---> Nested Master Page - Includes ViewData["departmentalData"]
したがって、ネストされたマスターページを使用するビューがある場合は、ViewData [" userData"]とViewData [" departmentalData"]の両方が含まれます。しかし、トップレベルのマスターページのみを使用している場合、ViewData [" userData"]しかありません。これは可能ですか?
解決
ViewDataをマスターページへのデータキャリアとして使用することを主張する場合(おそらく使用するMvcContribプロジェクトのHtml.RenderAction(...)を使用する代わりに)マスターページが使用されます。必要なデータをViewData [" departmentalData"]に入力するようにActionFilterをセットアップできます。
他のヒント
1つの可能性は、ViewPageとViewMasterPageの両方に拡張メソッドを記述して、必要なデータを取得することです。よくわかりませんが、これはRob Coneryが彼の Commerce.MVC パッケージで行ったことです。それを見てください。
同じ問題がありました。ここまでで、すべてのコントローラーの基本クラスと、ViewDataを生成するprotectedメソッドを思いつきました。この特定のマスターページを使用するすべてのアクションから呼び出します。
この質問に従って、他の人が何を思いついたのかを確認します。
MVCにはサブコントローラーの概念があります(これがまだ存在するかどうかはわかりませんが、MVCフレームワークでうまくいくでしょう)。 codeplexのmvc contribプロジェクトで見つけることができます。 いくつかの説明またはブログ投稿はここにあります...
http://mhinze.com/subcontrollers-in-aspnet-mvc/
およびそのサブコントローラーへのオブジェクトの受け渡しについては、ここで説明します...
http://mhinze.com/passing-objects-to-subcontrollers/
これはマスターページに基づいていませんが、あなたを助けることができます...
コントローラーが表示されるページに適切なViewDataを設定している限り、使用されているマスターページの数は問題ではありません。それとも何か不足していますか?