_Layout的ASP.Net MVC控制器

顺时针方向

我正在为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" })
马特·塔伯(Matt Tabor)

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

使用@ Html.Action()

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章