2011-02-07 11 views
8

私は最初のMVC 3アプリケーションをASP.NETで作成していますが、私はどのユーザーがどのようにメニューを表示できるか分かりません。ASP.NET MVC - 異なるロールのメニュー

私のアプリはMVC3 Webアプリケーションとして作成され、メニューは次のようになります。ユーザーと管理者:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
      </ul> 
</div> 

私は、ロールの2種類を作成しました。今、ユーザー(プロジェクト、プロファイル)と管理者(プロジェクトの管理、アカウントの管理、ニュースの管理)のための別のリンクを示したいと思います。

どうすればよいですか?

+2

あなたがこの質問を見てきました:[現在のユーザーの「役割」に基づいて、動的にASP.NET MVCマスターページのメニューの構築](http://stackoverflow.com/question/2203320/building-an-asp-net-mvc-master-page-menu-dynamic-based-the-current-users)は、あなたが持っているのとほぼ同じ問題に対処しているようです。 – R0MANARMY

答えて

7

私は解決策を見つけた:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("user")) { 
        <li>Projects link</li> 
        <li>Profile link</li> 
       } 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("admin")) { 
        <li>Manage Projects link</li> 
        <li>Manage Accounts link</li> 
       } 
      </ul> 
</div> 
+9

多くの条件付きロジックをビューに入れないでください。あなたがこのようにすることを強く求めているのであれば、これらのチェックの両方をあなたのアクションに入れて、単純なブール値のプロパティをViewModelに追加する必要があります。 – R0MANARMY

+0

[link](http://forums.asp.net/t/1903464.aspx?having+5+roles+and+one+layout+for+all+of+them+with+custom+menu+per+roles + in + mvc)@ehoogこのロジックは、ビューコードを非常に乱雑にし、MVCの原則に違反するため、ビューには適用しないでください。このロジックはコントローラ内になければなりません。 モデルクラスを作成する コントローラアクションで、モデルアイテムのデータをロールに応じて入力します。 ビューで、モデルのメニューデータを使用してメニューを生成します。 – sosha

関連する問題