2014-10-17 2 views
18

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

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

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

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

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

+1

Проверить этот пост Http: //stackoverflow.com/questions/6852979/get-current-controller-in-view. Любопытный на вашем случае использования, хотя .. – Chandu

+0

@Chandu - у моего сайта есть меню навигации, которое я динамически создаю в бритве, используя постоянный список и итерируя каждый элемент в этом списке, используя @@ foreach, чтобы вывести меню Предметы. Пока он строит меню, я хочу, чтобы он применял класс под названием «selected» к текущей странице, на которой я включен. Например, если я нахожусь на «www.example.com/Home/Index», и он попадает в пункт меню «Главная», я хочу, чтобы он применял класс. Я могу отправить код, если это поможет. – Icemanind

ответ

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

ИЛИ

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

Дополнение к ответу Коти пангу в: два примера он Обеспечиваются не эквивалентны.

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

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

+1

Вы скопировали и вложили это из ответа Сатиша, не так ли? – dorukayhan

+0

нет, это мой ответ –

0

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

@ViewContext.RouteData.GetRequiredString("controller") 
0

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

ViewContext.Controller.GetType().Name 
Смежные вопросы