Per alcuni casi, può esserci un enorme vantaggio nell'unire i due. MVC non è eccezionale per i siti basati sui contenuti. Tuttavia, le applicazioni web con flusso strutturato e presentazioni multiple di dati ne traggono enorme beneficio. Sitecore ha un po 'di limitazione quando si tratta di presentazioni multiple di dati - è possibile definire un solo set di dettagli di progettazione su un oggetto. Se non hai i requisiti per la modifica WYSIWYG o per un'anteprima con un solo clic, puoi utilizzare Sitecore come repository di dati e sfruttare alcuni dei valori di contesto che provengono dalla sua pipeline (come la lingua).
Un paio di modifiche sono necessarie per la pipeline HTTP Sitecore per fare questo lavoro:
1) Se si utilizza l'estensione aspx in IIS6 per arrivare ASP.NET per gestire le richieste MVC (ad es /Controller.aspx/Action) , correggi l'analisi FilePath di Sitecore (c'è un bug nel modo in cui Sitecore risolve il FilePath che risulterà nel percorso che si spezzerà).
Per risolvere questo problema, posizionare un nuovo processore all'inizio della pipeline httpRequestBegin.
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;
}
}
}
(Edit 2011/09/13: non ho dovuto usare la correzione di cui sopra in un certo tempo.)
2) Dillo Sitecore di ignorare gli URL che vengono instradati a ASP.NET MVC
Per fare ciò, posizionare un nuovo processore nella pipeline httpRequestBegin dopo 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();
}
}
}
Se utilizzando linguaggi nel vostro Sitecore URL, è necessario aggiungere un po 'di logica personalizzata che combina Sitecore generazione legame con generazione MVC ActionLink, al fine di garantire che il linguaggio si aggiunge l'inizio della vostra MVC URL. Tuttavia con le modifiche alla pipeline di cui sopra, l'aggiunta della lingua all'URL non dovrebbe avere effetti collaterali sul routing MVC (perché Sitecore riscrive l'URL dopo aver letto la lingua).
Ancora una volta, questo approccio è utile solo per determinati tipi di applicazioni. In questi casi però, Sitecore crea un eccellente livello di dati per il tuo modello. Cerca nella creazione di wrapper di articoli personalizzati per creare oggetti di dominio fortemente tipizzati basati su elementi Sitecore.
(Edit 2011/09/13: personalizzato Generator Articolo grandi opere per questo http://blog.velir.com/index.php/2010/10/19/custom-item-generator/.)
Buona fortuna.
Vale la pena notare a tutti coloro che si imbatte in questa ora che Sitecore sosterrà MVC come un quadro di prima classe in una versione successiva. http://www.sitecore.net/Community/Business-Blogs/Technical-Trends/Posts/2012/06/MVC-and-Sitecore-651-Overview.aspx –
Ecco una buona raccolta di contenuti se stai appena iniziando con Sitecore e MVC: https://sitecore-community.github.io/docs/sitecore-mvc/ –
Ho esperienza con Sitecore v8 +, qui MVC è un'opzione predefinita e completamente supportata. –