36
votes

We are starting off a new project with sitecore as our CMS. I was thinking of using Sitecore as the Content Authoring Tool and use ASP.net MVC as in the Content delivery(CDA) Side along with Sitecore. Would love to hear your ideas and thoughts on this.

Have anybody tried this?

Is sitecore and MVC competing or Complementing technologies?

Any architectural ideas are welcome.

9
It's worth noting to anyone that comes across this now that Sitecore will support MVC as a first-class framework in a later release. sitecore.net/Community/Business-Blogs/Technical-Trends/Posts/…Mike B
Here is a good collection of content if you are just starting out with Sitecore and MVC: sitecore-community.github.io/docs/sitecore-mvcChristian Hagelid
I have experience with Sitecore v8+, here MVC is a default option and fully supported.Noldy

9 Answers

27
votes

For certain cases, there can be huge benefit to merging the two. MVC isn't that great of a fit for content-driven sites. However, web applications with structured flow and multiple presentations of data benefit hugely from it. Sitecore has somewhat of a limitation when it comes to multiple presentations of data -- you can only define one set of design details on an item. If you don't have requirements for WYSIWYG editing or easy one-click preview, you can use Sitecore as a data repository, and take advantage of some of the Context values that come from its pipeline (such as language).

A couple modifications are necessary to the Sitecore HTTP pipeline to make this work:

1) If using the aspx extension in IIS6 to get ASP.NET to handle MVC requests (e.g. /Controller.aspx/Action), fix Sitecore's FilePath parsing (there is a bug in how Sitecore resolves the FilePath that will result in the path getting chopped).

To fix this, place a new processor at the start of the 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;
        }
    }
}

(Edit 9/13/2011: I haven't had to use the above fix in some time.)

2) Tell Sitecore to ignore URLs that are routed to ASP.NET MVC

To accomplish this, place a new processor in the httpRequestBegin pipeline following the 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();
        }
    }
}

If using languages in your Sitecore URLs, you will need to add some custom logic that combines Sitecore link generation with MVC ActionLink generation, to ensure that language is added to the start of your MVC URL. However with the pipeline modifications above, the addition of language to the URL should have no side effects on MVC routing (because Sitecore rewrites the URL after reading the language).

Once again, this approach is only useful for certain types of applications. In those cases though, Sitecore makes an excellent data layer for your model. Look into creating custom Item wrappers to create strongly-typed domain objects based on Sitecore Items.

(Edit 9/13/2011: Custom Item Generator works great for this. http://blog.velir.com/index.php/2010/10/19/custom-item-generator/)

Best of luck.

8
votes

I think the real question you should be asking here is; if you already have Sitecore in place - why would you want the overhead and complicatino of introducing MVC?

Do you have any business requirements outside the basic web site that would necessitate MVC?

6
votes

I second Mark's comment about the requirements. Is it worth the risk? You will most likely loose the following features of Sitecore if you decide not to use native rendering functionality:

  1. OMS
  2. Web Forms for Marketers
  3. Conditional Rendering
  4. Page Editor
  5. Page Designer

maybe even more.

4
votes

I know that Sitecore developers have considered ASP.NET MVC, but I don't know if they've tried it. I can't think of any Sitecore projects that I think would have benefited from ASP.NET MVC. The Sitecore dynamic response engine, pipelines, handlers, wildcards, and other features seem to provide a superset of what you can accomplish with MVC. Similar story with ASP.NET master pages - you could use them with Sitecore, but Sitecore's layout details are superior.

I'm not against ASP.NET MVC with or without Sitecore, but Sitecore seem to provide the features of a controller (really ASP.NET is the controller, and Sitecore just plugs in), your information architecture is the model, and your presentation components are the views.

3
votes

They sure can be mixed, and I sure do see the value of it :) No native functionality is lossed with the method I describe in my blog post here: http://www.chrisvandesteeg.nl/2012/02/26/sitecore-mvc/

1
votes

As luck would have it, I'm currently working on two large projects using both technologies respectively. And while I'm big fan of both, I can't see any benefits to merging the two.

As far as Sitecore goes, there is a learning curve, but quite honestly in my case, since I actually learned ASP.NET MVC "first" as opposed to Web Forms, the learning curve has also been slightly attributed to some of my inexperience with Web Forms. That said, there still is most definitely a learning curve involved with Sitecore, but there are plenty of training and reference materials floating around to help with that. Also, the web controls that come with Sitecore make it feel a lot less like building a straight Web Forms app. Plus there's the option for using XSLT as a rendering engine which comes in handy as well.

If this is just one project you're thinking about, I would say just stick with Sitecore as it's presentation system is quite well thought out. And as Mark said above, it would really complicate things quite a bit I and I'm also not sure what there is to gain from it even. Also echoing the sentiments of commodore73, building stuff in Sitecore seriously does feel like you're using MVC already, just using a different framework.

0
votes

MVC in Sitecore has potential, but isn't production ready I think. You're covering unknown ground, as I discovered when creating this blog article.

0
votes

I know this post is pretty old, but I though I would give my opinion about Sitecore MVC anyway. I've started working on a project a few months back using exclusively Sitecore MVC. There are a lot of restrictions to what I work with since this project must work with or without CMS and be able to fit in with as many CMS as possible (We currently use 2).

ASP.NET MVC was a no brainer for us. It is 2015 and we must go ahead with the new technologies. We are using Sitecore 8, and I think that Sitecore MVC has become mature with Sitecore 7.

There are still a few bumps on the road though. If you plan on using Sitecore with form posts, make sure those are made using AJAX. Doing a validation on a field can be tricky if you use regular POST actions, but there are workarounds.

0
votes

Now there is Habitat project.

Sitecore Habitat is a Sitecore project that is bulit using the modular architecture. In their website they present a fully working example to install and test.

Habitat project:

https://github.com/Sitecore/Habitat