Obter o controlador atual em exibição


127

Eu tenho um View - _Editque vive News M/V/C.

Eu reutilizo o V/Mvia o CategoryControllercomo:

return PartialView("/Views/News/_Edit.cshtml", model);

Como dentro do View - _Editposso alertar o nome do controlador?

Quando eu:

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

O valor é: no News entanto, o URL é:/Category/foobar

Existe uma maneira de obter o valor 'Category'para alertar? obrigado


você não tem um NewsController?
caçador

Por favor, poste sua ação methodque está a carregar o partialvieweo que controllerque methodexiste no.
caçador

Respostas:


193

Eu coloquei isso na minha visão parcial:

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

no mesmo tipo de situação que você descreve e mostra o controlador descrito na URL (Categoria para você, Produto para mim), em vez da localização real da visualização parcial.

Portanto, use este alerta:

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

25
A resposta abaixo de Palpie é um atalho (mais fácil de lembrar):@ViewContext.RouteData.Values["controller"]
Laoujin 7/13

6
Apenas um fyi, você não precisa entender HttpContext.Current. Requestestá disponível diretamente.
Serj Sagan

É possível obter o nome completo da classe do controlador, incluindo o namespace? Também seria legal também poder mostrar o nome da visualização.
31415 Johncloud

3
btw, ["action"]funciona se você quiser o nome do método de ação.
Zapnologica 26/07

117

Eu faço assim, mas talvez seja apenas o ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Lembre-se de que sua solução retornará o controlador que está sendo executado no momento. Portanto, se um navegador fizer uma solicitação para ControllerA e ControllerA renderizar uma exibição parcial do ControllerB, sua solução retornará o nome do ControllerB, enquanto a solução Nicholas Sizer retornará o nome do ControllerA.
Thomas CG de Vilhena

Deve ser aceito como a melhor resposta. Isso ainda está funcionando no ASP.NET Core 2.2
Tom

21

Crie a classe base para todos os controladores e coloque aqui o atributo name:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

Em vista

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

Exemplo de controlador

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

Por favor, explique como a Namepropriedade é definida?
ErikE 03/03

13

Outra maneira de obter o nome atual do controlador no modo de exibição

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

5

Apenas use:

ViewContext.Controller.GetType().Name

Isso fornecerá o nome completo do controlador


2

Você ainda está no seu contexto, CategoryControllermesmo carregando um PartialViewda sua Views/Newspasta.


0

Você pode usar qualquer um dos códigos abaixo para obter o nome do controlador

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

Se você estiver usando o MVC 3, poderá usar

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.