From Event to Action: Accelerate Your Decision Making with Real-Time Automation
What's new in asp.net mvc 4
1. What’s new in ASP.NET MVC 4
Simone Chiaretta
Architect, Council of the EU
http://codeclimber.net.nz
Twitter: @simonech
2. Who am I?
► Simone Chiaretta
► Microsoft MVP ASP.NET
► ASP Insider
► Blogger – http://codeclimber.net.nz
► Moved to Belgium
► Contributor to various
OpenSource projects
► Runner/Climber/Triathlete
Disclaimer:"The views expressed are purely those of the speaker and may not in any circumstances be regarded as stating an official position of the Council"
3. ASP.NET MVC 4 Goals
► Enhance development and deployment
► Bring together all MS Web Stack
► Better HTML5 / Mobile support
► Cloud ready
4. ASP.NET MVC 4
► New and refreshed Project Template
► Enhanced support for mobile sites
► Recipes for custom code generation
► Improved support for async controllers
► Cloud-ready
5. ASP.NET MVC 4 – Developer Preview
► Released September 2011 @ Build
► Both for .NET 4 and .NET 4.5 preview
► Downloadable with Web Platform Installer 4
6. New Project Template
► New look closer to ASP.NET website
► HTML5 by default
► Responsive Design (via media queries)
► Uses jQueryUI for the login
► Includes KnockOutJS
7. Support for Mobile Sites
► New Mobile Project Template for mobile-only
sites
► Display modes
– Views/index.cshtml
– Views/index.mobile.cshtml
► Inclusion of jQuery Mobile
► View Switcher and Browser Overriding
8. Recipes
► Custom code-generation plugins
► Downloadable via NuGet
► Still a bit undocumented
► Heavily rely on VS Extensibility
9. Recipes How-To
► Class library
► Reference
Microsoft.VisualStudio.Mvc.Extensibility.1.0.
dll
► Implement IRecipe or IFolderRecipe
► Build your own custom UI Dialog
► Package and deploy with NuGet
Or
Install Package AspNetMvc4.RecipeSdk
10. Task based Async Controllers
► Single Method Async Contollers
► No more manual handling of requests
► Returns Task<ActionResult>
MVC3
public void SyncAllAsync()
{
AsyncManager.OutstandingOperations.Increment();
MVC4
StuffService stuff = new StuffService();
stuff.StuffCompleted += (sender, e) =>
public Task<ActionResult> SyncAllAsync(){
MVC4 + C#5 (or Async CTP)
{ AsyncManager.Parameters["model"] = e.Result;
StuffService stuff = new StuffService();AsyncManager.OutstandingOperations.Decrement();
};
return stuff.DoStuffAsync()
stuff.DoStuffAsync("Some other => {
.ContinueWith(t stuff");
} return View(t.Result)
public async Task<ActionResult> SyncAllAsync()
{ });
public ActionResult SyncAllCompleted(SyncViewModel model)
}
{ StuffService stuff = new StuffService();
return View(model); stuff.DoStuffAsync());
return View(await
} }
11. Looking at the future
► Better integration with other “products”
– Web Pages 2
– ASP.NET 4.5
– Web API
13. WCF WebAPI Preview 6
► Uses WCF syntax for web API
► Returns JSON or XML
► Extensible
14. Summary
► MVC4 introduced new mobile features, better
aync, enhanced tooling
► Current release is a Developer Preview from
BUILD (4 months ago)
► Beta coming in the next few months
► Final release in sync with next release of
Visual Studio vNext (Dev11)
15. References
► MVC 4 Main Page and Dev Preview
http://www.asp.net/mvc/mvc4
► Release Notes
http://www.asp.net/whitepapers/mvc4-release-notes
► Roadmap
http://aspnet.codeplex.com/wikipage?title=ASP.NET%20MVC%204%20RoadMap
► Phil Haack’s Mobility Talk, BUILD Sep 2011
http://channel9.msdn.com/events/BUILD/BUILD2011/TOOL-803T
► Create an MVC4 Recipe
http://haacked.com/archive/2011/09/22/writing-a-recipe-for-asp-net-
mvc-4-developer-preview.aspx
► The evolution of Async controllers in ASP.NET
MVC
http://codeclimber.net.nz/archive/2012/01/09/evolution-of-async-
controller-asp-net-mvc.aspx
Show creation of new site with the new project template, and show how the responsive design is implemented (via media queries)@media only screen and (max-width: 850px) {
Create a new project based on the mobile project template for mobile only sitesThen go back to the other project and show how to add mobile views
Imagine you want to create a page using jqGrid or want to get data from a specific JSON based api: with recipes you could automate all the repetitive coding and collect inputs via custom dialogs.
Bundling: just add BundleTable.Bundles.EnableDefaultBundles(); toGlobal.asax