关于菜单:用于_Layout的ASP.Net MVC控制器

ASP.Net MVC Controller for _Layout

我正在为MVC开发动态菜单系统,只是为了使其工作,我为菜单创建了部分视图,并且使用以下语法可以很好地工作:

1
@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu)

但是,要这样做,我必须在每个Controller和每个动作的ViewBag中设置MainMenu和FooterMenu(或与此相关的任何其他菜单)。为了避免这种情况,我想知道是否存在一个推荐的事件,该事件可以全局访问ViewBag。如果不是,是否有人建议将Menu对象传递给会话变量?这听起来对我来说不对,但只有我现在能想到的一件事。

更新:

_Layout.cshtml-我加入了对Action的新调用:

1
@Html.Action("RenderMenu","SharedController", new { name ="Main" })

SharedController.cs-添加了新操作:

1
2
3
4
5
6
7
8
9
10
11
12
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);
    }
}

并且它引发以下异常:

The controller for path '/' was not found or does not implement
IController.

更新2:

因此,问题在于我通过全名引用了控制器,而您只需要减去"控制器"的控制器名称。整洁的花絮。因此,以我的示例为例:

1
@Html.Action("RenderMenu","Shared", new { name ="Main" })

将菜单设置为动作,然后在主布局中调用它。

使用@ Html.Action()

该操作可以返回包含菜单代码的局部视图。