asp.net mvc3和多级导航

时间:2011-03-31 16:19:19

标签: asp.net-mvc-3 routing navigation url-routing

我正在编写新的asp.net mvc应用程序,我对创建多级导航系统有疑问。

例如我有带主导航的网页(Cpu --- Gpu ---- Ram)

和子导航(intel,amd --- ati,nvidia --- DDR2,DD3)

好吧,我的第一个实现是:

public class NavigationItem
{
    public virtual int Id { get; set; }
    public virtual string Title { get; set; }
    public virtual string Controller { get; set; }
    public virtual string Action { get; set; }
    public virtual string Url { get; set; }
    public virtual string Section { get; set; }
}


public class NavigationController : Controller
{
    private readonly IUnitOfWork _unitOfWork;

    public NavigationController(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }

    public ActionResult MainMenu()
    {
        return View(_unitOfWork.NavigationItems.Where(x => x.Section == null).ToList());
    }

    public ActionResult SectionMenu()
    {


        return View(_unitOfWork.NavigationItems.Where(x => x.Section == "// name of section").ToLis());
    }
}

最后我的布局页面是:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
</head>
<body>
 <div class="main-menu">
  @{Html.RenderAction("MainMenu", "Navigation");}
 </div>

 <div class="section-menu">
  @{Html.RenderAction("SectionMenu", "Navigation");}
 </div>

    @RenderBody()
</body>
</html>

有了这个实现,我有问题我如何处理SectionMenu并且MainMenu处于活动状态,因为我想生成SectionMenu取决于MainMenu并突出显示它们。

我认为女巫的一个解决方法是在SectionMenu中处理url(控制器)。 例如:

    if (RouteData.Values["controller"].ToString() == "Administration")
    {
        // Generate section menu for Administration main menu
    }

我不喜欢这个解决方案,因为我使用“魔术字符串”值,而且每个MainMenu只有一个控制器。

如何实施此解决方案?

感谢您的建议

2 个答案:

答案 0 :(得分:0)

我想你必须深入了解MVC的路由系统。它在开始时看起来并不简单,但这可能是整个MVC中最重要的领域。有时虽然你很容易混淆,特别是如果你在Global.asax中定义了很多路线。有一个名为Route debugger的项目,它有所帮助。我不记得链接。尝试谷歌...如果你找不到它我会稍后发送链接...

答案 1 :(得分:0)

好的,我使用ViewBag功能。不干净,但工作