Я работаю над динамической системой меню для MVC и просто для ее работы, я создал частичное представление для меню, и он отлично работает с использованием синтаксиса ниже:
@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu)
НО, для этого мне нужно было бы установить MainMenu и FooterMenu (или любое другое меню, если на то пошло) в ViewBag на каждом контроллере и каждом действии. Чтобы этого избежать, мне было интересно, есть ли рекомендуемое событие, которое я мог бы получить в ViewBag глобально. Если нет, советует ли кто-нибудь рекомендовать передать объект Menu в переменную сеанса? Мне это не кажется правильным, но я могу только сейчас думать.
UPDATE:
_Layout.cshtml - я включил новый вызов Action:
@Html.Action("RenderMenu", "SharedController", new { name = "Main" })
SharedController.cs - добавлено новое действие:
public ActionResult RenderMenu(string name)
{
if (db.Menus.Count<Menu>() > 0 && db.MenuItems.Count<MenuItem>() > 0)
{
Menu menu = db.Menus.Include("MenuItems").Single<Menu>(m => m.Name == name);
return PartialView("_MenuLayout", menu);
}
else
{
return PartialView("_MenuLayout", null);
}
}
И это вызывает следующее исключение:
Контроллер для пути '/' не найден или не реализует IController.
ОБНОВЛЕНИЕ 2:
Итак, проблема в том, что я ссылался на контроллер по имени, и вам нужно только имя контроллера минус "Контроллер". Нежный лакомый кусочек. Итак, для моего примера это работает:
@Html.Action("RenderMenu", "Shared", new { name = "Main" })