MVC3 _Layout.cshtml ...禁用/启用菜单项

时间:2011-10-11 13:28:47

标签: asp.net-mvc-3 layout menu

我有一个MVC3 C#.Net项目。当我最初加载我的网站时,我想要路由到索引页面并禁用屏幕顶部的导航选项卡,直到做出选择。选择完成后,站点将路由到详细信息页面。然后我想启用导航菜单itmes。我怎样才能做到这一点?通过ViewBag?不确定

2 个答案:

答案 0 :(得分:2)

我认为问题在于索引页面不遵循网站其余部分的布局,因此索引页面不应使用主布局。

在索引页面上:

@{
    ViewBag.Title = "Index page";
    // Null or a custom layout
    Layout = null;
}

<p>Your content below</p>

如果要在某些条件下渲染菜单,则将菜单存储在部分视图模型中,例如SiteNavigation.cshtml

然后,您可以根据某些条件渲染此视图。例如。

@if(true){
   @{ Html.RenderPartial("SiteNavigation"); }
}

答案 1 :(得分:2)

我找到了问题的答案。 @ CodeRush的答案很酷,我将在另一个场景中使用它。但是我喜欢下面的实现,对于我的特殊情况。在Object1Controller索引获取Action中,我添加了以下代码:

ViewBag.Hidden = "hidden";

然后在Details get Action中,当在Index视图上单击链接时调用了Action,我添加了以下代码:

ViewBag.Hidden = "visible";

然后在_Layout.cshtml中我添加了这段代码:

 <li style="visibility: @ViewBag.Hidden">@Html.ActionLink("About", "About", "Home")</li>

呈现为:

<li style="visibility: hidden"><a href="/Home/About">About</a></li>

<li style="visibility: visible"><a href="/Home/About">About</a></li>

在其他控制器中,我不需要设置ViewBag.Hidden属性,因为visibility属性的默认值是“visible”。对于其他控制器,ViewSource显示:

<li style="visibility: "><a href="/Home/About">About</a></li>

呈现为可见