Asp.net mvc RenderAction RouteData Controller и значения действий - PullRequest
3 голосов
/ 17 октября 2010

Я пытаюсь создать метод RenderAction на главной странице, который будет динамически генерировать боковую панель на основе текущего контроллера и действия.Когда RenderAction вызывается в представлении, он заполняется контроллером и действием этого конкретного метода RenderAction.Например, если я нахожусь на контроллере «Home» и действии «Index», я ожидаю «Home» и «Index» в методе GenerateSideBar.Вместо этого я получаю контроллер «Домой» и действие «RenderSideBar».Спасибо за вашу помощь!

Просмотр моей главной страницы:

   <div class="side-bucket">
    <%
        string Controller = ViewContext.RouteData.Values["Controller"].ToString();
        string Action = ViewContext.RouteData.Values["Action"].ToString();
    %>
    <% Html.RenderAction("RenderSideBar", "Home", new { controller = Controller, action = Action }); %>

Действие контроллера:

public ActionResult GenerateSideBar(string controller, string action)
        {
            switch (controller.Trim().ToLower())
            {
                case "member" :
                    return View(@"sidebar\MemberSidebar");
                default:
                    break;
            }

            return null; 
        }

1 Ответ

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

Проблема в том, что имена параметров контроллера и действия являются особыми, потому что используются в ваших маршрутах и ​​будут иметь приоритет, когда средство связывания модели по умолчанию пытается установить их значения.Просто переименуйте их так:

public ActionResult GenerateSideBar(string currentController, string currentAction)
{
    ...
}

и отобразите его:

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

Теперь вы должны получить правильное имя родительского действия.Также, если это действие предназначено для использования только как дочернее действие, вы можете украсить его атрибутом [ChildActionOnly].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...