2012-03-06 19 views
8

La mia conoscenza di MVC e Razor è piuttosto semplice quindi spero che sia qualcosa di piuttosto semplice. Fondamentalmente, ho il mio Controllers come normale ma la mia cartella Views ha una struttura nidificata. Per esempio, invece di:Come ottenere MVC alla vista di ricerca nella cartella nidificata

Views -> Index.cshtml 

E 'come

Views -> BrandName -> Index.cshtml 

ho creato un aiutante personalizzato per risolvere questo problema, ma non sono sicuro di come sarebbe lavorare con gli URL di stringa di query? Come esempio ecco un controllore:

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

Ma come faccio ad avere ActionResult Collection guardare:

Views -> Brand2 -> Collection.cshtml 

Ecco il metodo soluzione che stavo 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

Non chiaro. Hai una soluzione alternativa (che funziona principalmente), ma invece inserisci un controller molto semplice? –

+0

@HenkHolterman Non vedo molto il punto di procedere con la soluzione, poiché probabilmente c'è un modo per farlo in modo naturale – ediblecode

+0

@HenkHolterman Non vedo come la domanda non sia chiara in ogni caso – ediblecode

risposta

12

Utilizzare il seguente

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

Il codice sopra cercherà le seguenti viste.

~/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 per essere più diretto

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

Ora, voglio essere il primo a mettere in guardia voi che non bisogna mai, mai, mai usare questa risposta. C'è una buona ragione per seguire le convenzioni inerenti a un'applicazione MVC. Posizionare i file in posizioni note facilita la comprensione della tua applicazione da parte di tutti.

+0

Grazie buon signore, e anche grazie per il suggerimento :) – ediblecode

+0

Contento di poter aiutare – heads5150

+0

Meno che ideale ma +1 per la sicurezza del lavoro. – mdlars

Problemi correlati