首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MVC应用程序中显示导航和子导航?

如何在MVC应用程序中显示导航和子导航?
EN

Stack Overflow用户
提问于 2009-09-20 19:50:21
回答 3查看 1.1K关注 0票数 1

我很难确定MVC应用程序的导航位置。例如,假设您有以下结构:

Bulldogs

  • Arkansas Razorbacks

  • 东南会议
      • 佐治亚州

代码语言:javascript
复制
- Pac-10  
    - USC
    - Hawaii

代码语言:javascript
复制
- Big East etc...

如何最好地创建一个结构来实现“主”导航和随后的“子”导航?使用假设的例子,您将为每个会议提供特定的子导航,显示其各自的学院(仅显示会议学院)。

你会在主视图中处理这件事,然后隐藏非选定的会议吗?或者你会创建一个菜单助手(或者是另一个部分),并从每个学院的观点来描述这一点吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-21 03:13:09

经过一段时间的思考和建议,我想出了这个解决方案。由于我的子导航将始终低于主导航,所以我决定采用约定而不是配置方法。

在我的Site.Master中,我有以下两个呈现部分。一个显示主导航,另一个调用BuildSubNavigation显示,获取要呈现的部分的名称:

代码语言:javascript
复制
<% Html.RenderPartial("_MainNavigation"); %>
<% var submenu = ViewContext.BuildSubNavigation();
    if (submenu != null) {
          Html.RenderPartial(submenu);
}%>

当然,这可以交给帮手,而我打算这样做,这是更明确的,有助于理解这个问题。

这样做的目的是调用BuildSubNavigation方法。按照惯例,如果控制器要有一个特定的子导航,就会有一个以"_Navigation“的形式出现的部分,因此,按照示例的精神,其中一个部分将是"_SouthEasternConferenceNavigation”,然后检查当前视图是否真的存在。如果是这样的话,我将返回名称,然后将其用于呈现部分。

代码语言:javascript
复制
public static string BuildSubNavigation(this ViewContext vc) {
    var controller = vc.RouteData.Values["controller"] ?? "";
    var viewName = "_" + controller + "Navigation";

    if (ViewExists(vc.Controller.ControllerContext, viewName, null)) {
        return viewName;
    } else {
        return null;
    }
}

这是一种检查视图是否实际存在于当前视图引擎的方法:

代码语言:javascript
复制
public static bool ViewExists(ControllerContext cc, string viewName, string masterName) {
    if (ViewEngines.Engines.FindView(cc, viewName, masterName).View != null) {
        return true;
    } else { return false; }
}

我不确定这是否是最好的方法,但对于我目前正在做的一个小项目来说,它运行得相当好。

谢谢你的回答!

票数 1
EN

Stack Overflow用户

发布于 2009-09-20 20:05:09

最好的方法是使用多个嵌套的母版页。例如,Site.master将包含您的顶级导航(会议列表?)然后,您将为每个会议提供一个不同的母版页,以“扩展”site.master。理论上,您可以拥有任意数量的嵌套母版页。最后,佛罗里达鳄鱼等将是“真实的”视图(即非母版页)。

棘手的部分是告诉任何父母版页当前选择了哪个导航项。由于无法将母版页绑定到ViewModel,所以必须使用“视图字典”,例如“查看”“SelectedMainNavItem”。

票数 1
EN

Stack Overflow用户

发布于 2009-09-20 20:12:33

为什么不使用总显示主导航的全局布局模板,并依赖某个助手来呈现子导航呢?(助手可能是多余的--您可能只是在布局模板中输出子导航内联)

控制器将当前类别/子类别以及描述当前子导航选项的某些数据结构传递给视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1451838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档