2017-12-21 4 views
0

Ich habe eine ASP.NET Core 2.0-Anwendung und ich versuche, die Layout-Seite eine Ansicht außerhalb der Ansicht verwenden, sollte eingestellt werden. Auf diese Weise muss ich nicht für alle meine Ansichten den gleichen Code oben wiederholen.ASP.NET-Core - Set Layout-Seite Außerhalb der Ansicht

Ich kann dies erreichen, indem alle meine Ansichten aus der folgenden Basisklasse erben, die es im Konstruktor setzt:

public class RazorPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> { 
    public RazorPage() { 
     var theme = "Theme1;" 
     Layout = $"~/Areas/{theme}/Views/Shared/_Layout" + RazorViewEngine.ViewExtension; 
    } 
} 

Dies jedoch den Namen des Themenänderungen basierend auf der aktuellen URL gut funktioniert. Ich dachte, ich könnte dies tun, indem ich auf den aktuellen Kontext zugreife, aber wenn ich die Context-Eigenschaft innerhalb des Konstruktors aufruft, gibt es null zurück.

hat es keine geeignete Methode erscheinen außer Kraft zu setzen, wo ich die Layout-Eigenschaft könnte und Zugriff auf den aktuellen Anforderungskontext haben.

Kennt jemand eine alternative Art und Weise zu tun?

Bitte beachten Sie, dass ich weiß, dass ich dies mit _ViewImports/_ViewStart-Dateien erreichen konnte, aber aufgrund der Struktur meiner Anwendung würde ich doppelte Dateien benötigen und auch keine Geschäftslogik in meinen Ansichten haben.

+1

Vielleicht beginnen mit IViewLocationExpander, https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razor.iviewlocationexpander?view=aspnetcore-2.0 –

Antwort

0

Ich habe einen IViewLocationExpander (wie von @ valery.sntx vorgeschlagen) verwendet, um anzugeben, wo nach den freigegebenen Ansichten meines Themas gesucht werden soll, die sich aufgrund der aktuellen URL ändern.

ich dann erzeugt automatisch eine _ViewStart Datei eine IFileProvider verwenden und einfach einstellen, es ist Inhalt:

@{ 
    Layout = "_Layout"; 
} 

Der zweite Teil ist optional, aber es hat mich gerettet aus mehreren _ViewStart Dateien aufgrund der Art und Weise meine Anwendung zu erstellen, die ist entworfen.

Verwandte Themen