我正在为MVC开发动态菜单系统,并且为了使其正常工作,我为菜单创建了部分视图,并且使用以下语法可以很好地工作:
@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu)
但是,要这样做,我必须在每个Controller和每个动作的ViewBag中设置MainMenu和FooterMenu(或与此相关的任何其他菜单)。为了避免这种情况,我想知道是否有一个推荐的事件,我可以全局访问ViewBag。如果不是,是否有人建议将Menu对象传递给会话变量?这听起来对我来说不对,但是我现在只能想到的一件事。
更新:
_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" })
将菜单设置为操作,然后在主布局中调用它。
使用@ Html.Action()
该操作可以返回其中包含菜单代码的局部视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句