我正在编写新的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只有一个控制器。
如何实施此解决方案?
感谢您的建议
答案 0 :(得分:0)
我想你必须深入了解MVC的路由系统。它在开始时看起来并不简单,但这可能是整个MVC中最重要的领域。有时虽然你很容易混淆,特别是如果你在Global.asax中定义了很多路线。有一个名为Route debugger的项目,它有所帮助。我不记得链接。尝试谷歌...如果你找不到它我会稍后发送链接...
答案 1 :(得分:0)
好的,我使用ViewBag功能。不干净,但工作