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()
该操作可以返回包含菜单代码的局部视图。