Obtenga el controlador actual a la vista

127

Tengo uno en el View - _Editque vive News M/V/C.

Reutilizo la V/Mvía CategoryControllercomo:

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

¿Cómo View - _Editpuedo alertar el nombre del controlador desde dentro ?

Cuando yo:

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

El valor es: News Sin embargo, la URL es:/Category/foobar

¿Hay alguna forma de obtener el valor 'Category'para alertar? Gracias

Valamas
fuente
no tienes un NewsController?
cazador
Por favor, publique su acción methodque está cargando partialviewy lo controllerque methodexiste.
hunter

Respuestas:

193

He puesto esto en mi vista parcial:

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

en el mismo tipo de situación que describe, y muestra el controlador descrito en la URL (Categoría para usted, Producto para mí), en lugar de la ubicación real de la vista parcial.

Entonces use esta alerta en su lugar:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');
Nicholas Sizer
fuente
25
La respuesta a continuación por Palpie es un atajo (más fácil de recordar):@ViewContext.RouteData.Values["controller"]
Laoujin
66
Solo para tu información, no necesitas hacerlo HttpContext.Current. RequestEstá disponible directamente.
Serj Sagan
¿Es posible obtener el nombre completo de la clase de controlador, incluido el espacio de nombres? También sería genial poder mostrar el nombre de la vista.
Johncl
3
por cierto, ["action"]funciona si quieres el nombre del método de acción.
Zapnologica
117

Lo hago así, pero tal vez solo sea ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]
Peter Hedberg
fuente
12
Tenga en cuenta que su solución devolverá el controlador que se está ejecutando actualmente. Por lo tanto, si un navegador realiza una solicitud de ControllerA y ControllerA presenta una vista parcial de ControllerB, su solución devolverá el nombre de ControllerB, mientras que la solución Nicholas Sizer devolverá el nombre de ControllerA.
Thomas CG de Vilhena
Debe ser aceptado como la mejor respuesta. Esto todavía funciona en ASP.NET Core 2.2
Tom
21

Cree una clase base para todos los controladores y ponga aquí el atributo de nombre:

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

En vista

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

Ejemplo de controlador

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }
Sel
fuente
¿Explica cómo Namese establece la propiedad?
ErikE
13

Otra forma de obtener el nombre actual del controlador en la vista

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Vladimir Savinov
fuente
5

Solo usa:

ViewContext.Controller.GetType().Name

Esto le dará el nombre completo del controlador

batspy
fuente
2

Todavía estás en el contexto de tu CategoryControlleraunque estés cargando un archivo PartialViewdesde tu Views/Newscarpeta.

cazador
fuente
0

Puede usar cualquiera de los siguientes códigos para obtener el nombre del controlador

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

Si está usando MVC 3, puede usar

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