Ответ 1
@{
var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();
}
ИЛИ
@{
var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
}
Кажется, у меня трудное получение чего-то, что должно быть легко. Из моего представления, используя Razor, я хотел бы получить имя текущего контроллера. Например, если я здесь:
http://www.example.com/MyController/Index
Как получить имя контроллера, MyController
из выражения Razor:
@* Obviously this next line doesn't work
@Controller.Name
*@
Я новичок в MVC, поэтому, если это очевидный ответ, не нападайте на меня плохо.
@{
var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();
}
ИЛИ
@{
var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
}
Добавление к ответу Коти Панги: два примера, которые он предоставил, эквивалентны не.
var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();
Это вернет имя контроллера, обрабатывающего представление, где выполняется этот код, тогда как
var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
Это вернет имя контроллера, запрошенного в URL-адресе.
Хотя в большинстве случаев они будут одинаковыми, есть некоторые случаи, когда вы можете находиться внутри частичного представления, принадлежащего другому контроллеру, и хотите получить имя контроллера "выше" в цепочке, в в этом случае требуется второй метод.
(Извинения за публикацию этого как отдельного ответа, у меня пока нет репутации, чтобы прокомментировать его.)
@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
MVC 3
@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
MVC 4.5
@ViewContext.RouteData.Values["controller"].ToString();
Чтобы удалить необходимость ToString()
использовать вызов
@ViewContext.RouteData.GetRequiredString("controller")
Также, если вы хотите получить полное имя контроллера (с окончанием "Контроллер" ), вы можете использовать:
ViewContext.Controller.GetType().Name
@ViewContext.RouteData.Values [ "контроллер" ] ToString();.