【发布时间】:2015-02-09 17:57:05
【问题描述】:
我有一个 MVC3 C#.Net 项目。当我最初加载我的网站时,我想路由到一个索引页面并禁用屏幕顶部的导航选项卡,直到做出选择。做出选择后,该站点将路由到详细信息页面。然后我想启用导航菜单项。我怎样才能做到这一点?传递一个 ViewBag?不确定
【问题讨论】:
-
导航项是否只在详情页有效?如果我返回索引页面怎么办?
标签: asp.net-mvc-3 layout menu
我有一个 MVC3 C#.Net 项目。当我最初加载我的网站时,我想路由到一个索引页面并禁用屏幕顶部的导航选项卡,直到做出选择。做出选择后,该站点将路由到详细信息页面。然后我想启用导航菜单项。我怎样才能做到这一点?传递一个 ViewBag?不确定
【问题讨论】:
标签: asp.net-mvc-3 layout menu
我认为问题在于索引页面不遵循网站其余部分的布局,因此索引页面不应该使用主布局。
在您的索引页上:
@{
ViewBag.Title = "Index page";
// Null or a custom layout
Layout = null;
}
<p>Your content below</p>
如果您想在某些条件下呈现菜单,则将菜单存储在局部视图模型中,例如SiteNavigation.cshtml
然后您可以根据某些条件渲染此视图。例如。
@if(true){
@{ Html.RenderPartial("SiteNavigation"); }
}
【讨论】:
我找到了问题的答案。 @CodeRush 的回答很酷,我将在另一个场景中使用它。但对于我的特殊情况,我喜欢下面的实现。在 Object1Controller Index get 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 属性,因为可见性属性的默认值为“可见”。对于其他控制器,ViewSource 显示:
<li style="visibility: "><a href="/Home/About">About</a></li>
呈现为可见
【讨论】: