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

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


  • 59 Views
  • 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.

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

PowerPoint Slideshow about 'ASP.NET 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


Agenda

Agenda

ASP.NET MVC History

Getting Started

The Model

Controllers/Actions

Views

Routes

AJAX

MvcContrib

Questions


Asp net mvc history
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?

ASP.NET

  • HttpApplication

  • HttpContext

  • HttpRequest

  • HttpResponse

  • HttpRuntime

  • HttpUtility

  • IHttpHandler

  • IHttpModule

WebForms

  • Server Lifecycle

  • Postback

  • ViewState

    ASPX

  • MasterPages

  • Themes, Skins

  • General Templating


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

ASP.NET

  • HttpApplication

  • HttpContext

  • HttpRequest

  • HttpResponse

  • HttpRuntime

  • HttpUtility

  • IHttpHandler

  • IHttpModule

Mvc

  • Routes

  • Controllers

  • ViewData

  • Filters

  • MvcContrib

    ASPX

  • MasterPages

  • Themes, Skins

  • General Templating




Getting started routes
Getting Started - Routes

  • Old

    • http://codecampserver.com?group=adnug&meeting=april09

  • ASP.NET MVC

    • http://codecampserver.com/adnug/april09 { key1}/{ key2 }

    • Default: {controller}/{action}/{id}http://foo.com/product/edit/22063748ProductController.cspublic 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

UI

Business Logic

Data Access/Infrastructure


Model layered architecture1
Model - Layered Architecture

UI

Business Logic

Data Access

WCF

I/O


Model solution structure
Model - Solution Structure

Client

Business Logic

Web Service

File

Infrastructure

Data Access

DB


Model onion architecture
Model - Onion Architecture

SpeakerController

IConferenceRepository

IUserSession

User Interface

Domain Services

UserSession

<<class>>

Domain Services

Objects (aggregates)

Web Service

Application Core/Domain Model

Tests

File

Infrastructure

ConferenceRepository

<<class>>

DB


Model solution structure1
Model - Solution Structure

UI

Core

IoC Container

Web Service

File

Infrastructure

DB


Model onion architecture flattened
Model - Onion Architecture (flattened)

UI

I/O

WCF

Data Access

Domain Services

Aggregates (entities)


Model data driven architecture
Model - Data-Driven Architecture

User Interface

More Business Logic

Business Logic

Infrastructure

DB

Web Service

File

Tests

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

URL VERB ACTION

/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

"~/austinCodeCamp/attendees/new".ShouldMapTo<AttendeesController>(

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

"~/austinCodeCamp/attendees/123/bob-johnson".ShouldMapTo<AttendeesController>(

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

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

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



Ajax demo
AJAX - Demo


Mvccontrib
MvcContrib

  • http://mvccontrib.org

  • 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

  • www.partywithpalermo.com

  • Headspring’s Agile Boot Camp