ASP.NET MVC 3

Post on 01-Nov-2014

18.616 views 2 download

Tags:

description

Slides for my speech at Microsoft Technology Conference in Hanoi, Vietnam, March 2011

Transcript of ASP.NET MVC 3

ASP.NET MVC 3 Buu Nguyen

Buu Nguyen

• Microsoft MVP (ASP.NET)

• Vice President of Technology, KMS Technology

• Lecturer, RMIT University Vietnam

ASP.NET MVC 3 Features

Major Improvements

• NuGet

• Razor View Engine

• HTML Helpers

• Dependency Injection

• Model Validation

Minor Improvements

• Sessionless Controllers

• ViewBag Property

• JSON Model Binding

• Granular Input Validation

• Partial Page Output Cache

• Global Action Filters

• New Action Result Types

ASP.NET MVC OVERVIEW

Technology Stack

Demo: Travel Log Web App

NUGET

NuGet - Package Manager for .NET

• Available at http://nuget.codeplex.com/

Package Manager Console

Building NuGet Package

• Authoring support • Define dependencies

• Transform configuration file and source

• Add initialization to web app startup via WebActivator

• Contribute at http://nuget.org/Contribute/Index

Demo: Combres NuGet Package

RAZOR VIEW ENGINE

Web Forms vs. Razor

Basic Syntax

Razor ASPX Description

@exp <%: exp %> Encode and output an expression to the page

@(exp) <%: exp %> Explicit expression, e.g. @(imagePath).jpg

@{ stms; } <% stms; %> Execute code statements

@Html.Raw(exp) <%= exp %> Output an expression to the page

@* cmt *@ <%-- cmt --%> Comment out code block

@if(cond) {

stm;

} else {

stms;

}

<%

if (cond) {

stms;

} else {

stms;

}

%>

Execute conditional statements Other constructs work the same way: @foreach, @for, @while, @switch, @try etc.

Transition to Code

• As soon as Razor parser encounters the syntax mentioned in Basic Syntax, it switches to code mode

• Escape @ by using @@, e.g. Tweets by @@buunguyen

Transition to Markup

Option 3: Single line markup

Option 1: HTML Block

Option 2: Text Block

Directives

or

Functions

Layout

_ViewStart.cshtml

• Code in _ViewStart.cshtml executes before view rendering

• Hierarchical, subfolders override parent folders

Razor Configuration

Demo: Razor in Travel Log

HTML HELPERS

Declarative HTML Helpers

• Alternative way to write reusable rendering blocks

• Can be placed into App_Code folder

New HTML Helpers (both declarative & traditional)

Built-in

• Chart

• WebGrid

• WebImage

• Crypto

• WebMail

microsoft-web-helpers

• ReCaptcha

• LinkShare

• Gravatar

• Bing

• Analytics

• FileUpload

• Video

• Twitter

• FaceBook

Demo: Declarative Helpers in Travel Log

DEPENDENCY INJECTION

Injecting Dependencies into Controllers

• registering & injecting controller factories

• injecting controllers Controllers

• registering & injecting view engines

• injecting view pages Views

• locating & injecting filters Action Filters

• registering & injecting Model Binders

• registering & injecting Value Providers

• registering & injecting Validation Providers

• registering & injecting Model Metadata

Providers

DI Points in ASP.NET MVC 3

IDependencyResolver

Activators

• Useful when you don’t use an IoC container

Demo: Dependency Injection in Travel Log

MODEL VALIDATION

Model Validation

• A value must be provided [Required]

• Value must be in a given range e.g. 1-10 [Range]

• Value must satisfy a regular expression [RegularExpression]

• Value must be a min length and less than the max length [StringLength]

• Value must equal another property e.g. password [Compare]

• Value is validated remotely via JSON [Remote]

• Custom model validators Extensible…

Other Validation Improvements

• Self-validating model with IValidatableObject

• ValidationContext for multi-property validation

• Client-validation is enabled by default

• jQuery Validate plugin is used by default

• Unobtrusive client-side validation

• EF4 CTP5 works with validation attributes

Demo: Remote Validator in Travel Log

MINOR IMPROVEMENTS

Sessionless Controllers

ViewBag Property

Note: can be used exchangeably with ViewData dictionary

JSON Model Binding

Granular Input Validation

Partial Page Output Cache

Global Action Filters

Note: all MVC 3 filters are effectively singleton, don’t use instance states

New Action Result Types

• HttpNotFoundResult

• HttpStatusCodeResult

• RedirectPermanent • RedirectToRoutePermanent

• RedirectToActionPermanent

Demo: Apply to Travel Log

Q&A

THANK YOU! buunguyen@kms-technology.com

www.buunguyen.net/blog

www.twitter.com/buunguyen

http://vn.linkedin.com/in/buunguyen