1

MVC2 の使用

現在ログインしているユーザーに正しいフラグが設定されていない場合、特定のメニューを非表示にする必要があるマスターページがあります。

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

現在ログインしているユーザーの User.Identity を取得して、マスター ページ ビューがレンダリングされる前に、データベースにクエリを実行し、それに応じて ViewData コレクションを変更するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

Html.Action および 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") %>

このようにして、メニュー用に完全に独立したビューモデル、リポジトリ、およびコントローラーを作成できます。このコントローラーには引き続きコンストラクター注入を使用でき、すべてが厳密に型指定されたままになります。もちろん、現在のページに基づいて、メイン コントローラーのまったく異なるビュー モデルが存在します。すべてのアクションが返す基本コントローラーや基本ビュー モデルは必要ありません。

于 2011-01-10T07:28:12.833 に答える