In bestimmten Fällen kann es sehr vorteilhaft sein, die beiden zusammenzuführen. MVC ist nicht so toll für Content-Driven-Sites. Allerdings profitieren Webanwendungen mit strukturiertem Fluss und mehrfacher Darstellung von Daten enorm davon. Sitecore hat eine gewisse Einschränkung, wenn es um Mehrfachpräsentationen von Daten geht - Sie können nur einen Satz von Designdetails für einen Artikel definieren. Wenn Sie keine Voraussetzungen für die WYSIWYG-Bearbeitung oder eine einfache Vorschau mit einem Klick haben, können Sie Sitecore als Datenrepository verwenden und einige der Kontextwerte aus der Pipeline (z. B. Sprache) nutzen.
Ein paar Änderungen sind auf die Sitecores HTTP-Pipeline notwendig, um diese Arbeit zu machen:
1) die aspx Erweiterung in IIS6 Bei der Verwendung von ASP.NET MVC zu bekommen Anfragen (zB /Controller.aspx/Action) zu handhaben , beheben Sie das FilePath-Parsen von Sitecore (es gibt einen Fehler in der Art, wie Sitecore den FilePath auflöst, der dazu führt, dass der Pfad zerlegt wird).
Um dies zu beheben, legen Sie einen neuen Prozessor am Anfang der httpRequestBegin-Pipeline.
public class MvcFixHttpProcessor : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
//when using a path such as /Controller.aspx/Blahblahblah, Sitecore's parsing of FilePath can break if Blahblahblah is too long
RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
if (routeData != null)
{
args.Url.FilePath = args.Context.Request.Url.LocalPath;
}
}
}
(Bearbeiten 2011.09.13: Ich habe nicht die oben fix in einiger Zeit verwenden musste.)
2) Sagen Sie Sitecores URLs zu ignorieren, die zu ASP.NET MVC weitergeleitet werden
Um dies zu erreichen, platzieren Sie einen neuen Prozessor in der httpRequestBegin-Pipeline nach dem ItemResolver.
public class SystemWebRoutingResolver : Sitecore.Pipelines.HttpRequest.HttpRequestProcessor
{
public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
{
RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(args.Context));
if (routeData != null)
{
args.AbortPipeline();
}
}
}
Wenn Sprachen in Ihrer Sitecores URLs verwenden, müssen Sie einige benutzerdefinierte Logik hinzufügen, die mit MVC Action Generation Sitecore Link Generation kombiniert, wird diese Sprache, um sicherzustellen, zu Beginn Ihrer MVC URL hinzugefügt. Bei den oben beschriebenen Pipeline-Änderungen sollte das Hinzufügen von Sprache zur URL jedoch keine Nebenwirkungen auf das MVC-Routing haben (da Sitecore die URL nach dem Lesen der Sprache neu schreibt).
Noch einmal, dieser Ansatz ist nur für bestimmte Arten von Anwendungen nützlich. In diesen Fällen erstellt Sitecore jedoch eine hervorragende Datenebene für Ihr Modell. Sehen Sie sich das Erstellen von benutzerdefinierten Item-Wrappern an, um basierend auf Sitecore-Elementen stark typisierte Domänenobjekte zu erstellen.
(Edit 2011.09.13: Benutzerdefinierte Artikel Generator funktioniert gut für diese http://blog.velir.com/index.php/2010/10/19/custom-item-generator/.)
Best of luck.
Es ist erwähnenswert, für jeden, der jetzt über diese kommt, dass Sitecore MVC als First-Class-Rahmen in einem späteren Release unterstützt. http://www.sitecore.net/Community/Business-Blogs/Technical-Trends/Posts/2012/06/MVC-and-Sitecore-651-Overview.aspx –
Hier ist eine gute Sammlung von Inhalten, wenn Sie gerade erst anfangen out mit Sitecore und MVC: https://sitecore-community.github.io/docs/sitecore-mvc/ –
Ich habe Erfahrung mit Sitecore v8 +, hier ist MVC eine Standardoption und vollständig unterstützt. –