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.