Asp net mvc in action austin code camp 2009
1 / 72

ASP MVC in Action Austin Code Camp, 2009 - PowerPoint PPT Presentation

  • Uploaded on

ASP.NET MVC in Action Austin Code Camp, 2009. Jeffrey Palermo Chief Technology Officer Headspring Systems. Agenda. ASP.NET MVC History Getting Started The Model Controllers/Actions Views Routes AJAX MvcContrib Questions. ASP.NET MVC History.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
Download Presentation

PowerPoint Slideshow about 'ASP MVC in Action Austin Code Camp, 2009' - sahara

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Asp net mvc in action austin code camp 2009
ASP.NET MVC in ActionAustin Code Camp, 2009

  • Jeffrey Palermo

  • Chief Technology Officer

  • Headspring Systems




Getting Started

The Model







Asp net mvc history

  • Oct 2007 – Scott Guthrie provides first glimpse at Alt.Net Conf in Austin, TX

  • Dec 2007 – First official CTP released

  • Dec 2007 – MvcContrib open source project launches

  • 2008 – 4 more CTPs released

  • Mar 2009 – First version released

  • Mar 2009 – MvcContrib 1.0 released

  • Today – Lots of buzz

Getting started components
Getting Started - Components

  • .Net 3.5 SP1

    • System.Web.Abstractions.dll

      • HttpContextBase

      • HttpRequestBase

      • etc

    • System.Web.Routing.dll

  • ASP.NET MVC v1.0

    • System.Web.Mvc.dll

  • Extras

    • MvcContrib.dll

    • Microsoft.Web.Mvc.dll

Getting started responsibilities
Getting Started - Responsibilities

  • Controllers

    • Responsible for WHAT a screen does.

  • Views

    • Responsible for DISPLAYING the screen.

  • Models

    • Responsible for REPRESENTING the task.

Getting started advantages
Getting Started - Advantages

  • Decouples rendering logic from handling user input

  • Decouples screen logic from processing the http request

  • Leverages interfaces to separate responsibilities within the presentation layer

  • Provides complete control over markup rendered

  • Provides complete control over urls

  • Different presentation concerns can be independently tested

Getting started web forms
Getting Started - Web Forms?


  • HttpApplication

  • HttpContext

  • HttpRequest

  • HttpResponse

  • HttpRuntime

  • HttpUtility

  • IHttpHandler

  • IHttpModule


  • Server Lifecycle

  • Postback

  • ViewState


  • MasterPages

  • Themes, Skins

  • General Templating

Getting started asp net mvc
Getting Started - ASP.NET MVC?


  • HttpApplication

  • HttpContext

  • HttpRequest

  • HttpResponse

  • HttpRuntime

  • HttpUtility

  • IHttpHandler

  • IHttpModule


  • Routes

  • Controllers

  • ViewData

  • Filters

  • MvcContrib


  • MasterPages

  • Themes, Skins

  • General Templating

Getting started routes
Getting Started - Routes

  • Old



    • { key1}/{ key2 }

    • Default: {controller}/{action}/{id} ViewResult Edit(string id){…}

Flow of an asp net mvc request
Flow of an ASP.NET MVC Request

  • Request comes in to /Home

  • IIS determines the request should be handled by ASP.NET

  • ASP.NET gives all HttpModules a chance to modify the request

  • The UrlRoutingModule determines that the URL matches a route configured in the application

Flow of an asp net mvc request1
Flow of an ASP.NET MVC Request

  • The UrlRoutingModule gets the appropriate IHttpHandler from the IRouteHandler that is used in the matching route (most of the time, MvcRouteHandler)as the handler for the request

  • The MvcRouteHandler constructs and returns MvcHandler.

  • The MvcHandler, which implements IHttpHandler executes ProcessRequest.

Flow of an asp net mvc request2
Flow of an ASP.NET MVC Request

  • The MvcHandler uses IControllerFactory to obtain an instance of IController using the "controller" route data from the route {controller}/{action}/{id}.

  • The HomeController is found, and its Execute method is invoked.

  • The HomeController invokes the Index action.

Flow of an asp net mvc request3
Flow of an ASP.NET MVC Request

  • The Index action adds some objects to the ViewData dictionary.

  • The HomeController invokes the ActionResult returned from the action, which renders a view.

  • The “index” view in the views folder displays the objects in ViewData.

  • The view, derived from System.Web.Mvc.ViewPage, executes its ProcessRequest method.

  • ASP.NET renders the response to the browser.

Model long lived architecture
Model - Long-lived architecture

  • What causes legacy code?

  • Dependencies

  • Coupling

  • Lack of validated feedback (testing)

Model layered architecture
Model - Layered Architecture


Business Logic

Data Access/Infrastructure

Model layered architecture1
Model - Layered Architecture


Business Logic

Data Access



Model solution structure
Model - Solution Structure


Business Logic

Web Service



Data Access


Model onion architecture
Model - Onion Architecture




User Interface

Domain Services



Domain Services

Objects (aggregates)

Web Service

Application Core/Domain Model







Model solution structure1
Model - Solution Structure



IoC Container

Web Service




Model onion architecture flattened
Model - Onion Architecture (flattened)




Data Access

Domain Services

Aggregates (entities)

Model data driven architecture
Model - Data-Driven Architecture

User Interface

More Business Logic

Business Logic



Web Service



Application Core

Controllers icontroller
Controllers – Icontroller

Controllers action requirements
Controllers – Action Requirements

  • The method must be public.

  • The method cannot be a static method.

  • The method cannot be an extension method.

  • The method cannot be a constructor, getter, or setter.

  • The method cannot have open generic types.

  • The method is not a method of the controller base class.

  • The method cannot contain ref or out parameters.

Controllers actionresult
Controllers – ActionResult

Controllers parameter binding1
Controllers – Parameter Binding

public ActionResult Save(string conferenceKey, string firstName, string lastName, string email,

string webpage)


//method body omitted.


Controllers parameter binding2
Controllers – Parameter Binding

  • Precedence

    • Form values

    • Route arguments

    • Querystring parameters

Controllers parameter binding3
Controllers – Parameter Binding

public class AttendeeForm


public virtual GuidConferenceID { get; set; }

public virtual string FirstName { get; set; }

public virtual string LastName { get; set; }

public virtual string EmailAddress { get; set; }

public virtual string Webpage { get; set; }


//resulting action method signature

public ActionResult Save(AttendeeForm form){}

Controllers model binding1
Controllers – Model Binding

/conference/edit?conference=austincodecamppublic ActionResult Edit(Conference conference){…}

Controllers registering binders
Controllers – Registering Binders

Controllers viewdata
Controllers – ViewData

Controllers action filters
Controllers – Action Filters

  • IActionFilter – before and after hooks when an action is executing

  • IResultFilter – before and after hooks when an action result is executing

  • IAuthorizationFilter – hooks when the controller is authorizing the current user

  • IExceptionFilter - hooks when an exception occurs during the execution of a controller

Controllers provided actionfilters
Controllers – Provided ActionFilters

  • System.Web.Mvc.ActionFilterAttribute

  • System.Web.Mvc.OutputCacheAttribute

  • System.Web.Mvc.HandleErrorAttribute

  • System.Web.Mvc.AuthorizeAttribute

  • System.Web.Mvc.ValidateAntiForgeryTokenAttribute

  • System.Web.Mvc.ValidateInputAttribute

Controllers action selectors
Controllers – Action Selectors

  • System.Web.Mvc.AcceptVerbsAttribute – limits action selection to requests of the specified verb type

  • System.Web.Mvc.NonActionAttribute – prevents action method from being selected

Views iviewengine
Views – IViewEngine

Views webformviewengine
Views – WebFormViewEngine

  • Uses <%=…%> code nuggets

  • No code-behind

  • Leverages Master Pages

  • Partial views can be .aspx or .ascx

  • Responsibility is rendering markup

Views helpers
Views – Helpers

  • System.Web.Mvc.HtmlHelper<T> - Used to help render html input elements

    • Html.TextBox()

    • Html.CheckBox()

  • System.Web.Mvc.UrlHelper – Used to render URLS

    • Url.Action()

    • Url.Content()

    • Url.RouteUrl()

  • System.Web.Mvc.AjaxHelper<T> - Used to render links and form elements used in an ajax request

    • Ajax.ActionLink()

    • Ajax.BeginForm()

Views strongly typed
Views – Strongly Typed

Views html helper binding
Views – Html Helper Binding

  • Values will be bound if:

    • The name is found in ModelState

    • The name is found as an explicit key in view data.

    • The name is found as a property of ViewData.Model.

    • The name is an expression interpretable, such as Product.Name or Products[2].Name.

Views modelstate validation
Views – ModelState Validation

Routes designing urls
Routes – Designing Urls

  • Make simple, clean URLs.

  • Make hackable URLs.

  • It is OK for URL parameters to clash.

  • Keep URLs short.

  • Avoid exposing database IDs wherever possible.

  • Consider adding unnecessary information.

Routes hackable urls
Routes – HackableUrls

Routes restful
Routes – RESTful


/sessions GET List all sessions

/sessions POST Add a new session

/sessions/5 GET Show session with id 5

/sessions/5 PUT Update session with id 5

/sessions/5 DELETE DELETE session with id 5

/sessions/5/comments GET List comments for session with id 5

Routes testing
Routes – Testing


x => x.New("austinCodeCamp"));


x => x.Show("austinCodeCamp", 123));

"~/login".ShouldMapTo<AccountController>(x => x.Login());

"~/conference/new".ShouldMapTo<ConferenceController>(x => x.New());

Ajax demo
AJAX - Demo



  • Founded by Eric Hexter and Jeffrey Palermo

  • Multiple view engines

  • ViewDataExtensions

  • IoC Container support

  • Html helpers

  • Extra ActionFilters

  • Anything else the community contributes

About me
About me

  • CTO, Headspring Systems

  • Agile coach

  • MCSD.Net

  • Microsft MVP, ASPInsider

  • Certified ScrumMaster

  • Director, Austin .Net User Group

  • INETA speakers bureau

  • U.S. Army Veteran

  • Party with Palermo


  • Headspring’s Agile Boot Camp