2012-03-06 11 views
8

Mi conocimiento de MVC y Razor es bastante básico, así que espero que sea algo bastante simple. Básicamente, tengo mi Controllers como normal pero mi carpeta Views tiene una estructura anidada. Por ejemplo, en lugar de:Cómo hacer que MVC busque en la carpeta anidada

Views -> Index.cshtml 

Es como

Views -> BrandName -> Index.cshtml 

creé una ayuda personalizada para solucionar este problema, pero no estoy seguro de cómo sería trabajar con direcciones URL de cadena de consulta? A modo de ejemplo aquí es un controlador:

private DataService ds = new DataService(); 

    // 
    // GET: /Collections/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 


    // 
    // GET: /Collections/Collection?id=1 
    public ActionResult Collection(int id) 
    { 
     var collectionModel = ds.GetCollection(id); 
     return View(collectionModel); 
    } 

Pero, ¿cómo puedo obtener ActionResult Collection mirar:

Views -> Brand2 -> Collection.cshtml 

Aquí es el método de solución que estaba usando:

public static string ResolvePath(string pageName) 
    { 
     string path = String.Empty; 
     //AppSetting Key=Brand 
     string brand = ConfigurationManager.AppSettings["Brand"]; 

     if (String.IsNullOrWhiteSpace(brand)) 
      path = "~/Views/Shared/Error.cshtml"; //Key [Brand] was not specified 
     else 
      path = String.Format("~/Views/{0}/{1}", brand, pageName); 

     return path; 
    } 
+0

Unclear. Tienes una solución alternativa (que funciona en su mayoría) pero publica un controlador muy simple en su lugar? –

+0

@HenkHolterman No veo mucho más que proceda con la solución ya que probablemente haya una forma de hacerlo naturalmente – ediblecode

+0

@HenkHolterman No veo cómo la pregunta no está clara de todos modos – ediblecode

Respuesta

12

uso del siguiente

public ActionResult Collection(int id) 
{ 
    var collectionModel = ds.GetCollection(id); 
    return View("/Brand2/Collection", collectionModel); 
} 

El código anterior buscará las siguientes vistas.

~/Views/Brand2/Collection.aspx 
~/Views/Brand2/Collection.ascx 
~/Views/Shared/Brand2/Collection.aspx 
~/Views/Shared/Brand2/Collection.ascx 
~/Views/Brand2/Collection.cshtml 
~/Views/Brand2/Collection.vbhtml 
~/Views/Shared/Brand2/Collection.cshtml 
~/Views/Shared/Brand2/Collection.vbhtml 

o para ser más directa

public ActionResult Collection(int id) 
    { 
     var collectionModel = ds.GetCollection(id); 
     return View("~/Brand2/Collection.cshtml", collectionModel); 
    } 

Ahora, yo quiero ser el primero en advertir que nunca, nunca, nunca debe usar esta respuesta. Hay una buena razón para seguir las convenciones inherentes a una aplicación MVC. Colocar sus archivos en ubicaciones conocidas hace que sea más fácil para todos comprender su aplicación.

+0

Muchas gracias señor, y también gracias por la sugerencia :) – ediblecode

+0

Me alegro de haber podido ayudar – heads5150

+0

Menos que ideal pero +1 para la seguridad laboral. – mdlars

Cuestiones relacionadas