Получить имя контроллера и имя_задачи и заполнить ViewData на главной странице?
У меня есть SuperController
, который будет унаследован от всех контроллеров. В конструкторе я пытаюсь заполнить ViewData с помощью ControllerName и ActionName.
Я не буду передавать имя ControllerName и ActionName как ViewData. У меня есть метод, который требует имя ControllerName и ActionName, и мне нужно передать возвращаемое значение метода как ViewData.
Как я могу это сделать?
Ответы
Ответ 1
Не используйте ViewData
. Используйте это вместо этого в своем Site.Master:
<%= ViewContext.RouteData.Values["Controller"] %>
<%= ViewContext.RouteData.Values["Action"] %>
SO - Получение имени контроллера и метода действий в представлении в ASP.Net MVC
Ответ 2
Попробуйте следующее:
RouteData.Values.First().Value.ToString()
Ответ 3
Предполагая, что я правильно читаю ваше сообщение, и вы не пытаетесь получить доступ к именам контроллеров/действий в представлении, но INSTEAD пытается что-то с ними сделать и поместить результат в viewdata:
Вы не можете сделать это в конструкторе, потому что контекст еще не создан. Вам необходимо переопределить метод 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 в свою функцию и позволить ему выбирать нужные значения.)
Ответ 4
Мне нужно было получить эти много из представлений, и я ударил его с немного другого угла - я написал несколько методов расширения для HtmlHelper, чтобы дать текущее имя_контроллера и имя_пользователя. Немного легче справиться, так как вам не нужно беспокоиться о погружении в сумку ViewData [] или впрыскивать вещи в соответствующих местах.