首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 3渲染菜单

MVC 3渲染菜单
EN

Stack Overflow用户
提问于 2011-10-17 21:31:30
回答 3查看 1.3K关注 0票数 2

为了在MVC3Razor中渲染我的菜单,我在Home控制器中有一个菜单操作: public ActionResult Menu() {...}这个操作获取菜单项并使用视图渲染它们。在_Layout中,我使用:@Html.Action(" menu ","Home")来呈现菜单。这可以很好地工作。

我的问题是我想选择当前的项目。为此,呈现菜单中的菜单项的每个操作都会将所选菜单项添加到ViewBag。问题是ViewBag在菜单操作中是空的。这是正确的方法吗?我想使用控制器+视图呈现一个菜单,而不仅仅是一个视图。我想这样做是为了避免在视图代码中有逻辑代码,并能够测试它。

你知道更好的方法吗?

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

EN

回答 3

Stack Overflow用户

发布于 2011-10-17 21:35:52

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

代码语言:javascript
复制
@Html.Action("Menu", "Home", new { sleectedItem = (string)ViewBag.SomeItem })

然后在子控制器操作中使用以下代码:

代码语言:javascript
复制
public ActionResult Menu(string selectedItem)
{
    ...
}

或者,如果您所需要的只是获取当前控制器和操作,则可以简单地从RouteData获取此信息并删除任何ViewBag:

代码语言:javascript
复制
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
    ...
}
票数 2
EN

Stack Overflow用户

发布于 2011-10-17 21:34:23

在构造菜单时,尝试从操作方法内部查看RouteData,如果是在HtmlHelper扩展中,则查看ViewContext。拉出哪个是当前控制器,哪个是当前操作,并相应地设置该菜单项。

来自动作方法的

代码语言:javascript
复制
object controller = RouteData.Values["controller"];
object action = RouteData.Values["action"];
object area = RouteData.DataTokens["area"];

来自html帮助器的

代码语言:javascript
复制
object controller = helper.ViewContext.RouteData.Values["controller"];
object action = helper.ViewContext.RouteData.Values["action"];
object area = helper.ViewContext.RouteData.DataTokens["area"];
票数 1
EN

Stack Overflow用户

发布于 2011-10-17 21:39:27

这是我之前编写的一个帮助程序,用于将css类打印到活动菜单:http://blog.tomasjansson.com/2010/09/asp-net-mvc-helper-for-active-tab-in-tab-menu/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7794508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档