Подтвердить что ты не робот

Получение имени контроллера из бритвы

Кажется, у меня трудное получение чего-то, что должно быть легко. Из моего представления, используя Razor, я хотел бы получить имя текущего контроллера. Например, если я здесь:

http://www.example.com/MyController/Index

Как получить имя контроллера, MyController из выражения Razor:

@* Obviously this next line doesn't work
    @Controller.Name
*@

Я новичок в MVC, поэтому, если это очевидный ответ, не нападайте на меня плохо.

4b9b3361

Ответ 1

@{ 
    var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();
}

ИЛИ

@{ 
    var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();
}

Ответ 2

Добавление к ответу Коти Панги: два примера, которые он предоставил, эквивалентны не.

var controllerName = this.ViewContext.RouteData.Values["controller"].ToString();

Это вернет имя контроллера, обрабатывающего представление, где выполняется этот код, тогда как

var controllerName = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

Это вернет имя контроллера, запрошенного в URL-адресе.

Хотя в большинстве случаев они будут одинаковыми, есть некоторые случаи, когда вы можете находиться внутри частичного представления, принадлежащего другому контроллеру, и хотите получить имя контроллера "выше" в цепочке, в в этом случае требуется второй метод.

(Извинения за публикацию этого как отдельного ответа, у меня пока нет репутации, чтобы прокомментировать его.)

Ответ 3

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

MVC 3

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

MVC 4.5

@ViewContext.RouteData.Values["controller"].ToString();

Ответ 4

Чтобы удалить необходимость ToString() использовать вызов

@ViewContext.RouteData.GetRequiredString("controller")

Ответ 5

Также, если вы хотите получить полное имя контроллера (с окончанием "Контроллер" ), вы можете использовать:

ViewContext.Controller.GetType().Name

Ответ 6

@ViewContext.RouteData.Values ​​[ "контроллер" ] ToString();.