2011-06-22 10 views
5

Cuando un usuario visita mi sitio, puede haber un template=foo pasado en la cadena de consulta. Este valor se está verificando y almacenando en el Session.¿Busca .cshtml en varias ubicaciones en MVC 3?

Mi diseño de archivo se ve así:

- Views/ 
    - Templates/ 
    - test1/ 
     - Home 
     - Index.cshtml 
    - test2/ 
     - Home 
     - List.cshtml 
    - Home/ 
    - Index.cshtml 

Básicamente, si un usuario solicita Index con template=test1, Quiero usar Views/Templates/test1/Index.cshtml. Si tienen template=test2, quiero usar Views/Home/Index.cshtml (porque /Views/Templates/test2/Home/Index.cshtml no existe). Y si no pasan una plantilla, entonces debería ir directamente al Views/Home.

Soy nuevo en MVC y .NET en general, así que no estoy seguro de dónde empezar a buscar. Estoy usando MVC3 y Razor para el motor de visualización.

+0

No estoy seguro si funciona, pero tratar de devolver la vista por 'volver Vista (string.Concat (Request.QueryString [ "template"], "/ Index")) ' –

+0

Un enfoque más elegante sería derivar de la clase Controller y anular el método" View ", si es posible –

Respuesta

1

Puede hacerlo creando un RazorViewEngine personalizado y configurando la propiedad ViewLocationFormats. There's a sample here que lo hace reemplazando el WebFormViewEngine, pero utilizando el RazorViewEngine debería funcionar igual de bien:

public class CustomViewEngine : WebFormViewEngine 
{ 
    public CustomViewEngine() 
    { 
     var viewLocations = new[] { 
      "~/Views/{1}/{0}.aspx", 
      "~/Views/{1}/{0}.ascx", 
      "~/Views/Shared/{0}.aspx", 
      "~/Views/Shared/{0}.ascx", 
      "~/AnotherPath/Views/{0}.ascx" 
      // etc 
     }; 

     this.PartialViewLocationFormats = viewLocations; 
     this.ViewLocationFormats = viewLocations; 
    } 
} 
1

Puede modificar Scott Hanselman's Mobile Device demo para que se ajuste a sus necesidades. En lugar de verificar el agente de usuario o si se trata de un dispositivo móvil, puede poner su lógica para verificar la cadena de consulta o sus valores de sesión.

+0

¿Esto se aplica para usar el motor Razor view? –

+0

Sí. Puede usar cualquier motor de visualización que desee. Hay un ejemplo allí donde usa Razor y Webforms. – Chris

Cuestiones relacionadas