繁体   English   中英

用于_Layout的ASP.Net MVC控制器

[英]ASP.Net MVC Controller for _Layout

我正在为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:

所以,问题是我用全名引用了Controller,你只需要控制器的名称减去“Controller”。 整洁的花絮。 所以,对于我的例子,这有效:

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

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

使用@ Html.Action()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM