2013-04-01 14 views
6

gefunden. Ich gruppiere meine Ansichten, Controller und Modelle. Die Struktur istFreigegebene Layouts wurden nicht mit überschriebenen Ansichtspfaden (Standortformaten) in ASP.NET MVC

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

Ansichten und Teilansichten arbeiten, aber Layout (Masteransichten) nicht Arbeit. Wenn ich ein Layout in einer .cshtml Datei angeben:

@{ Layout = "SimpleSharedLayout"; } 

bekomme ich diesen Fehler: nur

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

Asp.NET: Die Layoutseite "SimpleLayout" konnte nicht auf dem Pfad wird sucht das Layout im Verzeichnis des aktuellen Controller und nicht in den freigegebenen Ordner sieht * *

Obwohl diese funktioniert gut (bei ~/Controller/_Shared/Ansichten, die ist).

@Html.Partial("SharedPartialView") 

Ich habe Layout angeben, mit vollständigen Pfaden wie

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

Was nicht schwer, es zu tun ist, aber ich bin verrückt nach nicht zu bekommen in der Lage, daran zu arbeiten.

Verwenden des IIS Express, VS 2012, .NET 4.5

Haben Sie eine Vorstellung davon, was ich fehle?

My View Motor:

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

Antwort

2

IMHO, Sie sind die Konventionen des Rahmens kämpfen. Es wäre meine Empfehlung, das Framework in der Art und Weise zu verwenden, wie es für diese Art von Szenarien vorgesehen war, indem ich Bereiche erstelle.

Ich weiß, es ist wahrscheinlich nicht die Antwort, die Sie wollen, aber ich fühle mich wie das, was Sie beschrieben haben, Bereiche zu einem T.

+0

Ja, aber wenn ich einen Controller öffne, möchte ich alle zugehörigen Dateien zu diesem Controller sehen. Sie sind Ansichten, benutzerdefinierte css und js Dateien und Modelle. Warum sind sie sowieso in separaten Ordnern? Wenn ich mit einem Controller arbeite, arbeite ich gleichzeitig mit verwandten Modellen und verwandten Ansichten. Und ja, Areas ist nicht das Feature, nach dem ich suche. Was ich geschaffen habe, ist zwischen Bereichen und klassischer Herangehensweise. – Seregwethrin

+0

Sie werden assimiliert werden. Widerstand ist zwecklos. :) Im Ernst, ja, Sie können die Konvention so gestalten, wie Sie wollen, aber irgendwann müssen Sie sich fragen, ob die Anstrengung das alles wert ist.Es liegt mir fern, den Geist der Grenze zu zerstören, aber an deiner Stelle würde ich meine Zeit in Areas investieren und mich darauf konzentrieren, das Projekt so gut wie möglich zu machen. Viel Glück mein Freund. –

+0

Ich stimme Ihnen vollkommen zu, das ist sicher. Ich habe bereits aufgegeben :) Selbst Resharper lässt einige Ansichten nicht erscheinen und macht mich verrückt. Ich denke, ich muss zu der ursprünglichen Struktur zurückkehren ... – Seregwethrin

0

Versuchen ist die Viewengine Überlastung und die AreaMasterLocationFormats und MasterLocationFormats überschrieben werden. Überprüfen Sie diese andere erstaunliche Antwort, es ist vielleicht, was Sie suchen.

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

Ignorieren Sie den Titel, es geht um Strecken, die nicht wirklich ist, aber wo und wie die Viewengine nach Dateien sucht.