部分的にしたいナビゲーションバーがあります。ユーザーがログインしている場合や、特定のページにいる場合に追加のリンクが表示される場合など、ナビゲーション バーの内容はわずかに異なります。
パーシャルにデータを提供するにはどうすればよいですか? すべてのコントローラーの ViewData でこれを渡す必要がありますか?
いくつかの異なる手法を使用する必要がある可能性が高いため、オプションのリストが最も役立ちます。
部分的にしたいナビゲーションバーがあります。ユーザーがログインしている場合や、特定のページにいる場合に追加のリンクが表示される場合など、ナビゲーション バーの内容はわずかに異なります。
パーシャルにデータを提供するにはどうすればよいですか? すべてのコントローラーの ViewData でこれを渡す必要がありますか?
いくつかの異なる手法を使用する必要がある可能性が高いため、オプションのリストが最も役立ちます。
以前、管理者にメニューを表示し、スーパー管理者にメニューを表示し、他のメニューにメニューを表示する必要があるときに、同じ問題が発生しました...その場合に私がしたこと。部分ビューを返すアクションを作成し、マスター ページにレンダリングしました。ビューは強く型付けされました。(ユーザーの役割を表すプロパティを持つクラス。) その強く型付けされたクラスを使用して、かみそりビューで if および else if ロジックを作成し、問題を解決しました....これが役に立てば幸いです。
そのためのモデルを作成します。NavModel
コンストラクターでそれが表すすべてのデータ (わかりやすいユーザー名、現在のページなど) を収集し、それらをパブリック プロパティとして公開するクラスを作成します。次に、通常どおりモデルをビューにバインドします。ああ、ビューで直接 nav モデルをインスタンス化するのは避けてください。代わりに、インスタンス化しNavModel
て nav 部分ビューを返すコントローラー アクション (Nav と呼ばれます) を作成してください。ChildActionOnlyAttribute
クライアントが要求できないように、そのアクションをマークします。次に@Html.RenderAction
、nav パーシャル (通常はレイアウト ビュー) をレンダリングする必要があるビューで使用します。