2011-03-31 103 views
1

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

例如我有主导航网页(CPU --- ---- GPU拉姆)

和子导航与(英特尔,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的只有一个控制器。

如何实施此解决方案?

感谢意见

+0

有关你如何完成这一任何更新?我只是写了几乎完全相同的代码,试图做同样的事情... – Micah 2011-06-11 17:50:10

回答

0

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

0

我想你必须更深入地MVC的路由系统。它在开始时并不直观,但这可能是整个MVC中最重要的部分。有时,虽然你可以很容易地感到困惑,特别是如果你在Global.asax中定义了很多路由。有一个名为Route debugger的项目,它有帮助。我不记得链接。尝试谷歌它...如果你找不到它,我会稍后发送链接...

+0

感谢您的意见。是的路由调试器是伟大的东西链接在这里:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx。 Btw是的,你是对的,我有很多路由在Global.asax中定义:/ – Mennion 2011-03-31 21:03:08