2011-01-07 9 views
0

ログインページがあります。ログインページでは、メニューが表示されず、ユーザーのログインに基づいてメニューがホームページに表示されます。MVC3のレイアウトが難しい

私の問題はどうですかメニューはログインページにのみ表示されますか?

メニューのために、次のように私はページMenuControlPartial.cshtmlを持っています:

<li><a href="#">Admin</a> 
        <ul> 
       <li>TimeKeeper</li> 
       <li>AAA</li> 
       <li>BBB</li> 
       <li>CCC</li> 
       </ul> 
       </li> 


       <li><a href="#">Settings</a> 
       <ul> 
       <li>VV</li> 
       <li>XX</li>      
       </ul> 
       </li> 
      </ul> 

マイ_layout.cshtmlは、次のように通りである:

<div id="page"> 
      <div id="header"> 
       <div id="title"> 
           <br /> 
       </div> 
       @if (Request.IsAuthenticated) 
       {  
        <div id="loginInfo"> 
        @Html.Partial("_LogOnPartial") 
        </div> 

        <div class="clear"> 
        </div> 
         <div id="menucontainer"> 
         @Html.Partial("MenuControlPartial") 
         </div> 
        <div class="clear"></div> 
       } 
       </div> 
      <div id="content"> 
      @RenderBody() 
      </div> 
    </div> 
       } 
    </body> 

答えて

3

あなたは現在のコントローラをテストすることができアクション

@if (!(Html.ViewContext.RouteData.GetRequiredString("controller") == "Login" && Html.ViewContext.RouteData.GetRequiredString("action") == "Index")) { 
    <div id="menucontainer"> 
     @Html.Partial("MenuControlPartial") 
    </div> 
} 

そして、この醜さを避けるためには、ヘルパーを書く:

public static bool ShouldDisplayMenu(this HtmlHelper htmlHelper) 
{ 
    var routeData = htmlHelper.ViewContext.RouteData; 
    var controller = routeData.GetRequiredString("controller"); 
    var action = routeData.GetRequiredString("action"); 
    return !(controller == "Login" && action == "Index"); 
} 

、その後:

@if (Html.ShouldDisplayMenu()) { 
    <div id="menucontainer"> 
     @Html.Partial("MenuControlPartial") 
    </div> 
} 
関連する問題