MVC3中的布局难度

时间:2011-01-07 11:56:03

标签: asp.net-mvc-3

我有一个登录页面。在登录页面中,我没有任何菜单,根据用户登录,主页上会显示一个菜单。

我的问题是仅在我的登录页面中显示菜单的方式?

菜单中有一个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>

1 个答案:

答案 0 :(得分: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>
}