Получить ControllerName и ActionName и заполнить ViewData на главной странице? - PullRequest
33 голосов
/ 31 июля 2009

У меня есть SuperController, который будет унаследован от всех контроллеров. В конструкторе я пытаюсь заполнить ViewData , используя ControllerName и ActionName.

Я не собираюсь передавать ControllerName и ActionName в качестве ViewData. У меня есть метод, который требует ControllerName и ActionName, и мне нужно передать возвращаемое значение метода в виде ViewData.

Как я могу это сделать?

Ответы [ 4 ]

63 голосов
/ 31 июля 2009

Не используйте ViewData. Используйте это на своем Site.Master вместо:

<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>

SO - Получение имени контроллера и метода действия в представлении в ASP.Net MVC

6 голосов
/ 22 сентября 2011

Попробуйте это:

RouteData.Values.First().Value.ToString()
3 голосов
/ 31 июля 2009

Предполагая, что я правильно читаю ваш пост, и вы не пытаетесь получить доступ к именам контроллеров / действий в представлении, но INSTEAD пытается что-то с ними сделать и помещает результат в данные представления:

Вы не можете сделать это в конструкторе, потому что контекст еще не создан. Вам необходимо переопределить метод Initialize:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(requestContext);

        //here the routedata is available
        ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"];
    }

(Обратите внимание, что вы можете передать только ControllerContext.RouteData своей функции и позволить ей выбирать нужные значения.)

1 голос
/ 07 августа 2009

Мне нужно было получить эти данные из представлений, и я обратился к ним с несколько иной точки зрения - я написал несколько методов расширения для HtmlHelper, чтобы получить текущие ControllerName и ActionName. Немного проще в обращении, так как вам не нужно беспокоиться о том, чтобы погрузиться в сумку ViewData [] или добавить что-то в соответствующие места.

...