Tuesday, July 27, 2010

ASP.NET MVC 3 Preview 1 out...

I've been spending my free time with ASP.NET MVC 2 for last few months and I do love the way it let's me be in control. I've never been such a big fan of ASP.NET Web Forms, or ASP.NET at all. However, I've tried out Ruby on Rails, Django, etc. fancy web frameworks and haven't just seen the use of those in enterprise software and in web applications especially. But ASP.NET MVC feels like suitable for those also.

So, I'm very enthusiastic about the new stuff that's coming out. I've already played around with the Razor view engine that was included in WebMatrix. And now I got the first preview of ASP.NET MVC 3. Yei!

So what's nice and new in this one?

Razor view engine

This one I've played with already a bit. The razor engine is more streamlined option for HTML templates with minimalistic syntax. It just feels like coding C# inside a HTML page. E.g.

WebFormsViewEngine:

<ul>
<% foreach (var invoice in Model.Invoices) { %>
<li><%:invoice.Balance%></li>
<% } %>
</ul>



And same in Razor view engine:


<ul>
@foreach (var invoice in Model.Invoices) {
<li>@invoice.Balance</li>
}
</ul>



Or example with if and foreach statements:

@if(Model.Invoices.Count == 0)
{
No invoices open!
}
else
<ul>
@foreach (var invoice in Model.Invoices) {
<li>@invoice.Balance</li>
}
</ul>
}


So the idea here is to make things a bit easier for everyone.

ViewData dictionary improvement

Another thing that makes your life just a bit easier is the support for the dynamic ViewData dictionary.

Previously we added stuff to the ViewData dictionary like this:

ViewData["Field"] = "Field content stuff";

Now we can use dynamic properties:

ViewData.Field = "Field content stuff";

A small change that makes me happy!

Dependency injection support

To ease up the unit testing and TDD, there's also new DI and IoC related features, that I haven't yet had time to play with. The following hooks are provided:
  • Creating controller factories
  • Creating controllers and setting dependencies
  • Setting dependencies on view pages for both the Web Form view engine and the Razor view engine
  • Setting dependencies on action filters

And of course tons of more stuff, check the release notes for more!