Para nosso aplicativo Web, preciso salvar a ordem dos itens buscados e exibidos, dependendo da visualização - ou, para ser mais preciso - do controlador e da ação que gerou a visualização (e o ID do usuário, é claro, mas esse não é o ponto aqui).
Em vez de apenas me fornecer um identificador em cada ação do controlador (para usá-lo para algumas classificações de saídas de banco de dados dependentes de visualização), pensei que seria mais seguro e fácil criar esse identificador automaticamente a partir do controlador e do método de ação que obtém chamado de.
Como posso obter o nome do controlador e a ação de dentro do método de ação em um controlador? Ou preciso de reflexão para isso? Eu acho que é bem fácil, obrigado desde já!
c#
asp.net-mvc
controller
action
Alex
fonte
fonte
Route
atributo no método de ação que eu reunir? Além disso, também é possível renomear controladores?Respostas:
fonte
Aqui estão alguns métodos de extensão para obter essas informações (também inclui o ID):
Uso:
fonte
Pode ser útil. Eu precisava da ação no construtor do controlador e ela aparece neste ponto do ciclo de vida do MVC,
this
não foi inicializada eControllerContext = null
. Em vez de investigar o ciclo de vida do MVC e encontrar o nome da função apropriada para substituir, encontrei a ação noRequestContext.RouteData
.Mas, para fazer isso, como em qualquer
HttpContext
uso relacionado no construtor, você deve especificar o espaço para nome completo, porquethis.HttpContext
também não foi inicializado. Felizmente, parece queSystem.Web.HttpContext.Current
é estático.NOTA: provavelmente não é a maneira mais suportada de acessar todas as propriedades no HttpContext, mas para RequestContext e Session parece funcionar bem no meu aplicativo.
fonte
fonte
fonte
Isto é o que eu tenho até agora:
fonte
Aqui está a resposta mais simples e prática para obter um nome:
Ou
Codifique os testes acima com o asp.net mvc 5.
fonte
Adicione isso ao seu controlador base dentro do método GetDefaults ()
Implemente seus controladores no controle básico
Adicione uma visualização parcial _Breadcrumb.cshtml e adicione-a em todas as páginas necessárias com @ Html.Partial ("_ Breadcrumb")
_Breadcrumb.cshtml
fonte
filterContext
variável de dentroGetDefaults()
?Você pode obter o nome do controlador ou o nome da ação a partir da ação como qualquer variável. Eles são apenas especiais (controlador e ação) e já definidos, para que você não precise fazer nada de especial para obtê-los, exceto dizer que precisa deles.
Ou você pode incluir ação de controlador em seus modelos para obter dois deles e seus dados personalizados.
fonte
Isso parece funcionar muito bem para mim (até agora), também funciona se você estiver usando o roteamento de atributos.
fonte
Para remover a necessidade de
ToString()
uso de chamadasfonte
string actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
string controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
fonte
Por que não ter algo mais simples?
Basta ligar
Request.Path
, ele retornará uma String Separada pelo "/"e então você pode usar
.Split('/')[1]
para obter o nome do controlador.fonte
http://www.example.com/sites/site1/controllerA/actionB/
:). O MVC fornece várias APIs para roteamento, então por que você precisa analisar (novamente) URLs ?.controller/action