Я хотел установить класс CSS на моей главной странице, который зависит от текущего контроллера и действия. Я могу добраться до текущего контроллера через ViewContext.Controller.GetType().Name
, но как мне получить текущее действие (например Index
, Show
и т. Д.)?
c#
asp.net-mvc
Buggs
источник
источник
В RC вы также можете извлечь данные маршрута, например, имя метода действия, например:
Обновление для MVC 3
Обновление для MVC 4
Обновление для MVC 4.5
источник
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ вариацииЧтобы получить текущий идентификатор в представлении:
Чтобы получить текущий контроллер:
источник
ViewContext.RouteData.Values.ContainsKey(<key>)
сначала.Я знаю, что это более старый вопрос, но я видел его и подумал, что вам может быть интересна альтернативная версия, чем позволить вашему представлению обрабатывать данные, необходимые для его работы.
На мой взгляд, более простым способом было бы переопределить метод OnActionExecuting . Вам передается ActionExecutingContext, который содержит член ActionDescriptor, который вы можете использовать для получения искомой информации, который является ActionName, и вы также можете обратиться к ControllerDescriptor, который содержит ControllerName.
Надеюсь это поможет. Если что-нибудь, по крайней мере, это покажет альтернативу для кого-либо еще, что приходит на ваш вопрос.
источник
Я видел разные ответы и придумал помощника класса:
Так что в View (или master / layout) вы можете использовать его так (синтаксис Razor):
Надеюсь, поможет.
источник
Вы можете получить эти данные из RouteData ViewContext
источник
В MVC вы должны предоставлять View со всеми данными, а не позволять View собирать свои собственные данные, поэтому вы можете установить класс CSS в действии вашего контроллера.
и выберите это значение из ваших ViewData в вашем View
источник
Я голосую за это 2:
и
Вы можете получить как физическое имя текущего представления, так и действие, которое его вызвало. Это может быть полезно в частичных * .acmx страницах для определения хост-контейнера.
источник
Я использую ASP.NET MVC 4, и это то, что у меня сработало:
источник
Расширяя ответ Дейла Рэгана , его пример для повторного использования, создайте класс ApplicationController, который является производным от Controller, и, в свою очередь, все остальные контроллеры наследуются от этого класса ApplicationController, а не Controller.
Пример:
В вашем новом ApplicationController создайте свойство с именем ExecutingAction с этой подписью:
А затем в методе OnActionExecuting (из ответа Дейла Рагана) просто назначьте ActionDescriptor этому свойству, и вы сможете получить к нему доступ, когда вам это понадобится в любом из ваших контроллеров.
источник
Переопределите эту функцию в вашем контроллере
источник