ASP.NET MVC2 - как вызвать другой контроллер с помощью RenderAction (), а также передать аргументы этому контроллеру? - PullRequest
0 голосов
/ 26 октября 2010

Я пытаюсь визуализировать частичное представление на главной странице, используя Html.RenderAction () в VS 2010, используя MVC2. Вот мой вызов 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 Ответ

5 голосов
/ 26 октября 2010

В соответствии с вашим примером вы передаете аргументы в действие , а не в конструктор контроллера.

Итак, на самом деле то, что я должен делать, больше похоже на это

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...