在MVC 3的某些页面上没有显示菜单?

时间:2013-01-04 10:29:21

标签: c# asp.net-mvc-3 razor

我正在开发一个MVC 3网站。我在网站上有一个jquery菜单。并非所有页面都使用菜单。因此,如果没有授权页面,登录页面或注销没有菜单。我通过在_Layout页面中有如下所示的RenderSection来完成此操作。

 @RenderSection("Menu", required: false)

然后在应该有菜单的页面中我已经包含了以下部分:

@section Menu{
    <ul id="menu" style="width: 150px; height: 150px; margin-right: 10px; z-index: 9999;">
        <li>@Html.ActionLink("Dashboard", "Dashboard", "Home", null, new { @class = "menu-text" })</li>
        <li>@Html.ActionLink("History", "ViewHistory", "History", null, new { @class = "menu-text" })</li>
        <li><a class="menu-text" href="#">Reports</a>
            <ul style="z-index: 9999;">
                <li>@Html.ActionLink("File Report", "ViewFileReport", "Reports", null, new { @class = "menu-text" })</li>
                <li><a class="menu-text" href="#">New Files</a></li>
                <li><a class="menu-text" href="#">Old Files</a></li>
            </ul>
        </li>
        <li><a class="menu-text" href="#">Admin</a>
            <ul style="z-index: 9999;">
                <li>@Html.ActionLink("Change Password", "ChangePassword", "Home", null, new { @class = "menu-text" })</li>
            </ul>
        </li>
        <li>@Html.ActionLink("Log Off", "LogOff", "Home", null, new { @class = "menu-text" })</li>
    </ul>
}

由于我现在正在添加菜单并更改内容并添加更多页面,我意识到在我需要的所有页面上都有这个RenderSection但是在我的LogOn页面或First Landing页面上没有,因为我必须编辑它目前在8/9个地方,这只会增长。什么是实现我想要的更好的方式?

2 个答案:

答案 0 :(得分:3)

是的,您希望将菜单标记放在_Layout.cshtml中,但只在需要时才进行渲染。

您可以在bool中添加ViewBag值,以打开需要它的页面中的菜单。

在您的控制器操作中,输入:

ViewBag.ShowMenu = true;

然后在_Layout.cshtml你可以提出这样的条件:

@if ( ViewBag.ShowMenu == true )
{
  <ul id="menu" ... your menu markup here
  </ul>
}

答案 1 :(得分:0)

您可以将其放在App_Code文件夹中的文件中,如下所示:

App_Code\Helpers.cshtml

@helper Menu()
{
    <ul id="menu" style="width: 150px; height: 150px; margin-right: 10px; z-index: 9999;">
        <li>@Html.GetPageHelper().ActionLink("Dashboard", "Dashboard", "Home", null, new { @class = "menu-text" })</li>
        <li>@Html.GetPageHelper().ActionLink("History", "ViewHistory", "History", null, new { @class = "menu-text" })</li>
        <li><a class="menu-text" href="#">Reports</a>
            <ul style="z-index: 9999;">
                <li>@Html.GetPageHelper().ActionLink("File Report", "ViewFileReport", "Reports", null, new { @class = "menu-text" })</li>
                <li><a class="menu-text" href="#">New Files</a></li>
                <li><a class="menu-text" href="#">Old Files</a></li>
            </ul>
        </li>
        <li><a class="menu-text" href="#">Admin</a>
            <ul style="z-index: 9999;">
                <li>@Html.GetPageHelper().ActionLink("Change Password", "ChangePassword", "Home", null, new { @class = "menu-text" })</li>
            </ul>
        </li>
        <li>@Html.GetPageHelper().ActionLink("Log Off", "LogOff", "Home", null, new { @class = "menu-text" })</li>
    </ul>
}

在项目中为方法GetPageHelper()添加另一个类,这是从HtmlHelper<T>中的代码中获取App_Code实例所必需的:

public static class PageHelper
{
    public static HtmlHelper<object> GetPageHelper(this System.Web.WebPages.Html.HtmlHelper html)
    {
        return ((WebViewPage)WebPageContext.Current.Page).Html;
    }

    public static UrlHelper GetUrlHelper(this System.Web.WebPages.Html.HtmlHelper html)
    {
        return ((WebViewPage) WebPageContext.Current.Page).Url;
    }
}

现在,您可以在“视图”或“布局”中使用此类菜单:

@Helpers.Menu()