【问题标题】:ASP.Net MVC Controller for _Layout_Layout 的 ASP.Net MVC 控制器
【发布时间】:2014-02-22 02:38:02
【问题描述】:

我正在为 MVC 开发一个动态菜单系统,为了让它工作,我为菜单创建了一个局部视图,它使用以下语法效果很好:

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

但是,为此,我必须在每个控制器和每个操作的 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);
    }
}

它会抛出以下异常:

路径“/”的控制器未找到或未实现 控制器。

更新 2:

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

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

【问题讨论】:

    标签: asp.net-mvc menu partial-views


    【解决方案1】:

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

    使用@Html.Action()

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

    【讨论】:

    • 哇,我知道这很简单,但还不知道 MVC 的所有细节。非常感谢马特!
    • 没关系...很抱歉,我再次更新了我的代码。问题是当我只需要“共享”时,我包含了控制器的全名
    • 你在操作中有 SharedController,应该是我的
    猜你喜欢
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2010-11-17
    • 2023-03-24
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多