Eu queria definir uma classe CSS na minha página mestre, que depende do controlador e da ação atuais. Posso acessar o controlador atual via ViewContext.Controller.GetType().Name
, mas como faço para obter a ação atual (por exemplo Index
, Show
etc.)?
c#
asp.net-mvc
buggs
fonte
fonte
No RC, você também pode extrair dados da rota como o nome do método de ação como este
Atualização para MVC 3
Atualização para MVC 4
Atualização para MVC 4.5
fonte
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ variaçõesPara obter o ID atual em uma Visualização:
Para obter o controlador atual:
fonte
ViewContext.RouteData.Values.ContainsKey(<key>)
primeiro.Sei que essa é uma pergunta mais antiga, mas eu a vi e pensei que você poderia estar interessado em uma versão alternativa do que permitir que sua visualização lide com a recuperação dos dados necessários para seu trabalho.
Uma maneira mais fácil, na minha opinião, seria substituir o método OnActionExecuting . Você recebe o ActionExecutingContext que contém o membro ActionDescriptor que você pode usar para obter as informações que procura, que é o ActionName e também é possível acessar o ControllerDescriptor e o ControllerName.
Espero que isto ajude. Se alguma coisa, pelo menos, mostrará uma alternativa para qualquer outra pessoa que vier com sua pergunta.
fonte
Vi respostas diferentes e criei um ajudante de classe:
Portanto, no modo de exibição (ou mestre / layout), você pode usá-lo da seguinte maneira (sintaxe do Razor):
Espero que ajude.
fonte
Você pode obter esses dados do RouteData de um ViewContext
fonte
No MVC, você deve fornecer ao View todos os dados, não permitir que o View colete seus próprios dados, para que você possa definir a classe CSS na ação do seu controlador.
e escolha esse valor no seu ViewData no seu View
fonte
Eu voto para este 2:
e
Você pode recuperar o nome físico da visualização atual e a ação que a acionou. Pode ser útil em páginas * .acmx parciais para determinar o contêiner do host.
fonte
Estou usando o ASP.NET MVC 4, e foi isso que funcionou para mim:
fonte
Estendendo a resposta de Dale Ragan , seu exemplo para reutilização, crie uma classe ApplicationController que deriva do Controller e, por sua vez, todos os outros controladores derivam dessa classe ApplicationController em vez de Controller.
Exemplo:
No seu novo ApplicationController, crie uma propriedade chamada ExecutingAction com esta assinatura:
E então, no método OnActionExecuting (da resposta de Dale Ragan), simplesmente atribua o ActionDescriptor a essa propriedade e você poderá acessá-lo sempre que precisar em qualquer um dos seus controladores.
fonte
Substitua esta função no seu controlador
fonte