ASP.Net MVC-контроллер для _Layout

Я работаю над динамической системой меню для 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" })

Ответ 1

установите свое меню в качестве действия, затем вызовите его в макете макета.

use @Html.Action()

действие может вернуть частичный вид с вашим кодом меню.