2011-01-07 42 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> 
}