2013-04-01 8 views
6

Sto raggruppando visualizzazioni, controller e modelli. La struttura èLayout condivisi non trovati con percorsi di visualizzazione sottoposti a override (Formati di posizione) in ASP.NET MVC

~/Controllers 
-- /_Shared 
-- -- /Views 
-- -- /Content 
-- -- /Scripts 
-- /Home 
-- -- /Models 
-- -- /Content 
-- -- /Scripts 
-- -- /Views 
-- -- HomeController.cs 
-- /Account 
-- -- /Models 
-- -- /Views 
... 

Visualizzazioni e viste parziali lavoro, ma i layout (viste Master) no lavoro. Quando ho specificare un layout in un file .cshtml come:

@{ Layout = "SimpleSharedLayout"; } 

ottengo questo errore: La pagina layout "SimpleLayout" non è stato trovato nel seguente percorso:

"~/Controllers/Account/Views/SimpleSharedLayout".

Asp.NET solo cerca il layout in directory del regolatore di corrente e non sembra nella cartella condivisa * (che è in ~/Controller/_Shared/Vista) *

Anche se questo funziona bene.

@Html.Partial("SharedPartialView") 

devo specificare layout con percorsi completi come

@{ Layout = "~/Controllers/_Shared/Views/SimpleSharedLayout.cshtml"; } 

che non è una cosa difficile da fare, ma io sono pazzo di non essere in grado di farlo funzionare.

Utilizzando IIS Express, VS 2012, .NET 4.5

Avete un idea di cosa mi manca?

mio punto di vista del motore:

public class AreaViewEngine : RazorViewEngine 
{ 
    public AreaViewEngine() 
    { 
     AreaViewLocationFormats = new[] { 
         "~/Controllers/{1}/Views/{0}.cshtml", 
         "~/Controllers/_Shared/Views/{0}.cshtml"}; 

     ViewLocationFormats = AreaViewLocationFormats; 

     AreaMasterLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml" }; 

     MasterLocationFormats = AreaMasterLocationFormats; 

     AreaPartialViewLocationFormats = new[] { "~/Controllers/_Shared/Views/{0}.cshtml", 
         "~/Controllers/{1}/Views/{0}.cshtml"}; 

     PartialViewLocationFormats = AreaPartialViewLocationFormats; 
    } 
} 

risposta

2

IMHO, si stanno combattendo le convenzioni del framework. Sarebbe la mia raccomandazione di utilizzare il framework nel modo in cui è stato progettato con questo tipo di scenari creando aree.

io so che non è probabilmente la risposta che si desidera, ma mi sento come quello che hai descritto è Aree ad un T.

+0

Sì, ma quando apro un controller voglio vedere tutti i file relativi a quel controller. Sono viste, css personalizzati e file e modelli js. Perché sono in cartelle separate comunque? Quando lavoro con un controller, lavoro anche con il modello correlato e la vista correlata allo stesso tempo. E sì, Areas non è la funzione che sto cercando. Quello che ho creato è tra aree e approccio classico. – Seregwethrin

+0

Sarai assimilato. La resistenza è inutile. :) In tutta serietà, sì, puoi fare in modo che la convention funzioni nel modo desiderato, ma a un certo punto devi mettere in discussione se lo sforzo vale tutto questo.Lungi da me schiacciare il tuo spirito di frontiera, ma al tuo posto, metterei il mio tempo nelle Aree e concentrarmi sul rendere il progetto il meglio che possa essere. Buona fortuna amico mio. –

+0

Sono assolutamente d'accordo con te, questo è sicuro. Ho già rinunciato :) Even Resharper non mostra alcune visualizzazioni e mi fa impazzire. Penso che dovrò tornare alla struttura originale ... – Seregwethrin

0

Prova sovraccaricare il ViewEngine e sovrascrivendo i AreaMasterLocationFormats e MasterLocationFormats. Controlla questa altra sorprendente risposta, è forse quello che stai cercando.

How to set a Default Route (To an Area) in MVC

Ignora il titolo, non è proprio sui percorsi, ma dove e come il viewEngine cerca i file.

Problemi correlati