gpt4 book ai didi

asp.net-mvc - MVC 3 渲染菜单

转载 作者:行者123 更新时间:2023-12-04 06:10:52 24 4
gpt4 key购买 nike

为了在 MVC 3 Razor 中呈现我的菜单,我在 Home Controller 中有一个菜单操作: public ActionResult Menu() {...}
此操作获取菜单项并使用 View 呈现它们。在 _Layout 我使用:@Html.Action("Menu", "Home") 来渲染菜单。这工作正常。

我的问题是我想选择当前项目。为此,呈现菜单中项目的每个操作都会将所选菜单项添加到 ViewBag。问题是菜单操作中的 ViewBag 为空。
这是正确的方法吗?我想使用 Controller + View 而不是 View 来渲染菜单。我希望这样做是为了避免在 View 代码中包含逻辑代码并能够对其进行测试。

你知道更好的方法吗?

如何将数据从 _Layout.cshtml 传递到我使用 @html.Action 呈现的操作?

最佳答案

您可以将其作为参数传递:

@Html.Action("Menu", "Home", new { sleectedItem = (string)ViewBag.SomeItem })

然后在子 Controller Action 中使用这个:
public ActionResult Menu(string selectedItem)
{
...
}

或者如果您只需要获取当前 Controller 和操作,您可以简单地从 RouteData 获取此信息并删除任何 ViewBag:
public ActionResult Menu()
{
var rd = ControllerContext.ParentActionViewContext.RouteData;
var action = rd.GetRequiredString("action");
var controller = rd.GetRequiredString("controller");

// Now that you know the action and the controller build up your view model
// and pass to the view. It will then know which menu item to preselect
...
}

关于asp.net-mvc - MVC 3 渲染菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7794508/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com