asp.net mvc3 и многоуровневая навигация - PullRequest
1 голос
/ 31 марта 2011

Я пишу новое приложение 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.

Как реализовать это решение?

Спасибо за совет

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Хорошо, я использую функцию ViewBag.Не чисто, но работает

0 голосов
/ 01 апреля 2011

Полагаю, вам нужно углубиться в систему маршрутизации MVC.Поначалу все выглядит не так просто, но, вероятно, это самая важная область всего MVC.Хотя иногда вы можете легко запутаться, особенно если у вас есть много маршрутов, определенных в Global.asax.Есть проект под названием Route debugger, это помогает.Я не помню ссылку.Попробуй гуглить ... Если не найдешь, я пришлю ссылку позже ...

...