2011-01-10 1 views
1

ログインに基づいて、現在のユーザーでログインした場合、特定のメニューを非表示にする必要があり、マスター・ページが正しいフラグが設定されていません持っています。コントローラからマスターページにデータを渡す - 現在MVC2</p> <p>を使用して、ユーザー

よくある問題のようです。すべてのコントローラがベースコントローラから継承する必要があります(私はそれを持っています)。ベースコントローラのコンストラクタで、ViewDataに特定のパラメータを渡すことができます。これは素晴らしく、私にとっては簡単ですが、ベースコントローラの構築中にUser.IdentityオブジェクトとRequestオブジェクトがNULLになっています。

現在ログインしているユーザーのUser.Identityにアクセスして、データベースにクエリを実行できるようにするには&マスターページビューを表示する前にViewDataコレクションを変更しますか?

おかげ

答えて

1

あなたはHtml.Action and Html.RenderActionヘルパーと一緒に子供の行動を使用することができます。

public MenuController: Controller 
{ 
    public ActionResult Index() 
    { 
     // populate a view model based on the currently logged in user 
     // User.Identity.Name 
     MenuViewModel model = ... 
     return View(model); 
    } 
} 

と強く対応していますが、メニューをレンダリングしたりしません部分ビューを入力:だから、あなたは、現在のユーザ情報でログインを示すビューモデルを返すコントローラのアクションを持つことができます。あなたは、メニューのために完全に別のビューモデル、リポジトリとコントローラを持っている可能性が

<%= Html.Action("Index", "Menu") %> 

この方法:そして最後にマスターページ内のメニューがあります。あなたはまだこのコントローラーのコンストラクターインジェクションを使用することができ、すべてが強く型付けされたままです。もちろん、現在のページに基づいてメインコントローラのビューモデルは完全に異なるでしょう。すべてのアクションが返すベースコントローラーまたは基本ビューモデルは必要ありません。