Я пишу новое приложение 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());
}
}
* 1009И, наконец, моя страница макета выглядит следующим образом:
<!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, и выделить их.
Один из обходных путей для ведьм, я думаю, это дескриптор URL (контроллер) в SectionMenu.Например:
if (RouteData.Values["controller"].ToString() == "Administration")
{
// Generate section menu for Administration main menu
}
Мне не нравится это решение, потому что я работаю со значениями "магической строки", и у меня нет только одного контроллера на одно MainMenu.
Как реализовать это решение?
Спасибо за совет