2012-03-21 18 views
6

Tengo el controlador PlayerController y las acciones dentro de: View, Info, List. Entonces en las direcciones URL "/ Player/View" obtengo el resultado con el diseño predeterminado.Cambiar el diseño en el controlador según la url

Quiero obtener el resultado con diferentes diseños a demanda "/ External/View".

¿Cómo puedo lograrlo?

Respuesta

12

Aunque puede anular la disposición del controlador como se ha sugerido en otra respuesta, en mi opinión, esto significa que los controladores están recibiendo solo demasiado involucrados en la determinación de lo que será la interfaz de usuario. Lo mejor es dejar esto puramente a las Vistas para decidir.

Lo más cercano a lo que está pidiendo es que hacer esto en su actual "~/Views/_ViewStart.cshtml":

@{ 
    if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase)) 
    Layout = "~/Views/_ExternalLayout.cshtml"; 
    else 
    Layout = "~/Views/_Layout.cshtml"; 
} 

Dónde "~/Views/_ExternalLayout.cshtml" es su diseño alternativo.

Es posible que desee comprobar el "/" líder es correcto allí, no recuerdo si lo es.

Si coloca esto en el _ViewStart existente, cualquier vista que se esté renderizando en respuesta a una url que empiece por "/External" usará este nuevo diseño, de lo contrario se usará el 'normal'.

Otro enfoque es usar la tabla de enrutamiento para agregar un valor de ruta que se puede usar aquí para tomar una decisión de diseño; pero he optado por este enfoque para hacerlo simple.

+0

Voy a utilizar el mismo PlayerController para "/ External/View". Entonces, ¿debería de alguna manera especificar el enrutamiento? –

+0

@NikitaMartyanov: he cambiado ligeramente mi respuesta ya que está reutilizando el mismo controlador, la solución original es excelente para diferentes controladores, pero no cuando se reutilizan vistas y controladores para diferentes URL. –

+0

Gracias, Andras: utilicé este enfoque (también agregué la ruta para que "Exteranal/Vista" esté asignado a 'PlayerController' –

8

Puede especificar qué diseño debe usarse al devolver una vista dentro de su acción de controlador 'ExternalController'.

return View("View", "~/Views/Shared/_AnotherLayout.cshtml") 
+0

gracias, seguro mi día: D –

Cuestiones relacionadas