what’s new in asp.net mvc 3 building a nerddinner/appstore application
TRANSCRIPT
What’s new inASP.NET MVC 3
Building a NerdDinner/AppStore
Application
Introducing NerdDinner.com
Introducing NerdDinner.com
• nerddinner.codeplex.com• Free PDF walkthrough (updated to
2.0)– tinyurl.com/aspnetmvc
Introducing NerdDinner.com
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 HelpersImproved
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 HelpersImproved
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
Multiple View Engine Support
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 Forms6 transitions
Razor2 transitions
<ul>@for (int i = 0; i < 10; i++){ <li>@i</li>}</ul>
<ul><% for (int i = 0; i < 10; i++) {%> <li><%=i %></li><%} %></ul>
Layouts
Layout View<html>
<head>
<title>Title<title></head><body>
@RenderSection("Menu")@RenderBody()
</body></html>
@{Layout="~/Views/Shared/
_Layout.cshtml";}@section Menu {
<ul id="pageMenu"><li>Item 1</li><li>Item 2</li>
</ul>}
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(); }
}
Global Filters
• No longer need attributes• Applies to all actions on all
controllers
Global Filters
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
Dynamic ViewBag
<head>
<title>@ViewBag.Title<title></head>
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
<configuration> <appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> </appSettings></configuration>
web.config
Unobtrusive JavaScript
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
code
<configuration> <appSettings>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/> </appSettings></configuration>
web.config
Client Validation
HtmlHelper. ClientValidationEnabled = true;
code
<configuration> <appSettings>
<add key=“ClientValidationEnabled" value="true"/> </appSettings></configuration>
web.config
DEMO
Remote Validation
ResourcesSoftware Application
Developers
http://msdn.microsoft.com/
Infrastructure Professionals
http://technet.microsoft.com/
msdnindia technetindia @msdnindia @technetindia
© 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.