What’s new in ASP.NET MVC 3 Building a NerdDinner/AppStore Application
Introducing NerdDinner.com
nerddinner.codeplex.com Free PDF walkthrough (updated to 2.0) –tinyurl.com/aspnetmvc
Introducing NerdDinner.com
What’s new in ASP.NET MVC 3 Razor View Engine Multiple View Engine Support Validation Improvements Dynamic ViewBag Global Filters New ActionResults Project Dialog Improvements VBHTML Support Task-based Helpers Improved Dependency Injection Porting MVC Script Libraries to jQuery Granular ValidateInput Add View Dialog Improvements Project Dialog Extensibility Improvements Improved Caching Support JSON Binding Support
What’s new in ASP.NET MVC 3 Razor View Engine Multiple View Engine Support Validation Improvements Dynamic ViewBag Global Filters New ActionResults Project Dialog Improvements VBHTML Support Task-based Helpers Improved Dependency Injection Porting MVC Script Libraries to jQuery Granular ValidateInput Add View Dialog Improvements Project Dialog Extensibility Improvements Improved Caching Support JSON Binding Support
Upgrading ASP.NET MVC 3 Application Upgrader tinyurl.com/upgrademvc3
Multiple View Engine Support
protected void Application_Start() { ViewEngines.Engines.Add(new SparkViewFactory()); … } protected void Application_Start() { ViewEngines.Engines.Add(new SparkViewFactory()); … }
Razor Clean & Concise Based on Existing Languages Intellisense Code Colorization Unit Testing Support
Syntax Comparison Web Forms 6 transitions Razor 2 (int i = 0; i < 10; i++) (int i = 0; i < 10; i++) }
Layouts Layout="~/Views/Shared/_Layout.cshtml"; Menu { Item 1 Item 2 Layout="~/Views/Shared/_Layout.cshtml"; Menu { Item 1 Item 2 }
Web Forms to Razor Open Source Razor Converter github.com/telerik/razor-converter
DEMO Views using Razor
Filters Declarative Cross-cutting concerns Custom filters Supported since version 1
Types of Filters IActionFilter IResultFilter IExceptionFilter IAuthorizationFilter
Filters Example [HandleError] public class BlogController : Controller { [HandleLogging] public ActionResult Index() { return View(); } } [HandleError] public class BlogController : Controller { [HandleLogging] public ActionResult Index() { return View(); } }
Global Filters No longer need attributes Applies to all actions on all controllers
Global Filters protected void Application_Start() { GlobalFilters.Filters.Add(new MyActionFilterAttribute()); … } protected void Application_Start() { GlobalFilters.Filters.Add(new MyActionFilterAttribute()); … }
DEMO Logging Errors with Global Filters
Dynamic ViewBag Accessible via properties Properties map to ViewData entries Late-bound
DEMO Converting to Dynamic ViewBag
New Action Results HttpNotFoundResult RedirectResult HttpStatusCodeResult
DEMO Using New Action Results
JavaScript and AJAX JSON Binding jQuery Validation Unobstrusive JavaScript –Separation of Presentation and Content –No errors if AJAX isn’t supported RemoteAttribute
Unobtrusive JavaScript HtmlHelper.UnobtrusiveJavaScriptEnabled = true; code web.config
Unobtrusive JavaScript HtmlHelper.UnobtrusiveJavaScriptEnabled = true; code web.config
Client Validation HtmlHelper. ClientValidationEnabled = true; code web.config
DEMO Remote Validation
Resources Software Application Developers Infrastructure Professionals
© 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.