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


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()');

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"]

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"; } 
    }

¿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

5

Solo usa:

ViewContext.Controller.GetType().Name

Esto le dará el nombre completo del controlador


2

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.