我正在开发一个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个地方,这只会增长。什么是实现我想要的更好的方式?
答案 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()