ASP.NET MVC2 - 如何使用RenderAction()调用另一个控制器以及将参数传递给该控制器?

时间:2010-10-26 14:56:36

标签: c# asp.net-mvc asp.net-mvc-2

我正在尝试使用MVC2在VS 2010中使用Html.RenderAction()在我的母版页上呈现部分视图。这是我的RenderAction()调用:

           <% Html.RenderAction(
                   "Menu",
                   "Navigation",
                    new
                    {
                        currentAction = ViewContext.RouteData.Values["action"],
                        currentController = ViewContext.RouteData.Values["controller"]
                    }
            ); %>

但是,当它是导航控制器的构造函数时,它总是会命中没有参数定义的构造函数。

public class NavigationController : Controller
{
    public NavigationViewModel navigationViewModel { get; set; }

    public NavigationController()
    {
        -snip-
    }

    public NavigationController( string currentAction, string currentController )
    {
        -snip-
    }

    [ChildActionOnly]
    public ViewResult Menu()
    {
        return View(this.navigationViewModel);
    }
}

在我看到的所有示例中,这是使用RenderAction()调用传递参数的方法。如果我删除没有定义参数的构造函数,我不会收到任何错误消息,除了它抱怨。

如何让它调用定义了两个参数的构造函数?我希望能够在构建菜单时与currentAction和currentController进行比较,以正确突出显示用户当前所在的部分。

1 个答案:

答案 0 :(得分:5)

根据您的示例,您将参数传递给 action ,而不是控制器构造函数。

实际上,我认为你应该做的更像是这个

public class NavigationController
{
    [ChildActionOnly]
    public ViewResult Menu(string currentAction, string currentController)
    {
        var navigationViewModel = new NavigationViewModel();

        // delegates the actual highlighing to your view model
        navigationViewModel.Highlight(currentAction, currentController);

        return View(navigationViewModel);
    }
}