Presentation is loading. Please wait.

Presentation is loading. Please wait.

ASP.NET MVC in Action Austin Code Camp, 2009 Jeffrey Palermo Chief Technology Officer Headspring Systems.

Similar presentations


Presentation on theme: "ASP.NET MVC in Action Austin Code Camp, 2009 Jeffrey Palermo Chief Technology Officer Headspring Systems."— Presentation transcript:

1 ASP.NET MVC in Action Austin Code Camp, 2009 Jeffrey Palermo Chief Technology Officer Headspring Systems

2 ASP.NET MVC History Getting Started The Model Controllers/Actions Views Routes AJAX MvcContrib Questions

3 3 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

4 4 Getting Started - Pattern

5 5 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

6 6 Getting Started - Responsibilities Controllers Responsible for WHAT a screen does. Views Responsible for DISPLAYING the screen. Models Responsible for REPRESENTING the task.

7 7 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

8 8 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

9 9 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

10 10 Getting Started – New Project

11 11 Getting Started – Project Structure

12 12 Getting Started - Routes Old http://codecampserver.com?group=adnug&meetin g=april09 ASP.NET MVC http://codecampserver.com/adnug/april09 http://codecampserver.com/adnug/april09 { key1}/{ key2 } Default: {controller}/{action}/{id} http://foo.com/product/edit/22063748 ProductController.cs public ViewResult Edit(string id){…} http://foo.com/product/edit/22063748

13 13 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

14 14 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.

15 15 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.

16 16 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.

17

18 18 Model - Long-lived architecture What causes legacy code? Dependencies Coupling Lack of validated feedback (testing)

19 19 Model - Layered Architecture Data Access/Infrastructure Business Logic UI

20 20 Model - Layered Architecture Business Logic UI Data Access I/O WCF

21 21 Web Service File Model - Solution Structure Client Business Logic Data Access DB Infrastructure

22 22 Model - Onion Architecture Objects (aggregates) Domain Services User Interface Infrastructure Tests DB Web Service File Application Core/Domain Model SpeakerControllerSpeakerController IUserSessionIUserSession IConferenceRepositoryIConferenceRepository UserSession<<class>>UserSession<<class>> ConferenceRepository<<class>>ConferenceRepository<<class>>

23 23 Web Service File Model - Solution Structure UI Core Infrastructure DB IoC Container

24 24 Model - Onion Architecture (flattened) Domain Services UI Data Access I/O WCF Aggregates (entities)

25 25 Model - Data-Driven Architecture Infrastructure Business Logic More Business Logic User Interface Tests DB Web Service File Application Core

26

27 27 Controllers – Icontroller

28 28 Controllers – Action

29 29 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.

30 30 Controllers – Action return types

31 31 Controllers – ActionResult

32 32 Controllers – Parameter Binding

33 33 Controllers – Parameter Binding public ActionResult Save(string conferenceKey, string firstName, string lastName, string email, string webpage) { //method body omitted. }

34 34 Controllers – Parameter Binding Precedence 1.Form values 2.Route arguments 3.Querystring parameters

35 35 Controllers – Parameter Binding public class AttendeeForm { public virtual Guid ConferenceID { 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){}

36 36 Controllers – Model Binding

37 37 Controllers – Model Binding /conference/edit?conference=austincodecamp public ActionResult Edit(Conference conference){…}

38 38 Controllers – Registering Binders

39 39 Controllers – ViewData

40 40 Controllers – Filters

41 41 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

42 42 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

43 43 Controllers – Applying Filters

44 44 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

45

46 46 Views – Folder Structure

47 47 Views – IViewEngine

48 48 Views – View not found

49 49 Views – IView

50 50 Views – WebFormViewEngine Uses code nuggets No code-behind Leverages Master Pages Partial views can be.aspx or.ascx Responsibility is rendering markup

51 51 Views – Helpers System.Web.Mvc.HtmlHelper - 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 - Used to render links and form elements used in an ajax request Ajax.ActionLink() Ajax.BeginForm()

52 52 Views – Strongly Typed

53 53 Views – Strongly Typed

54 54 Views – Html Helper Binding Values will be bound if: 1.The name is found in ModelState 2.The name is found as an explicit key in view data. 3.The name is found as a property of ViewData.Model. 4.The name is an expression interpretable, such as Product.Name or Products[2].Name.

55 55 Views – Validation

56 56 Views – ModelState Validation

57 57 Views – Controls

58 58 Views – Custom View Helper

59

60 60 Routes – Overview

61 61 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.

62 62 Routes – Hackable Urls

63 63 Routes – RESTful URLVERBACTION /sessionsGETList all sessions /sessionsPOSTAdd a new session /sessions/5GETShow session with id 5 /sessions/5PUTUpdate session with id 5 /sessions/5DELETEDELETE session with id 5 /sessions/5/comments GETList comments for session with id 5

64 64 Routes – Default

65 65 Routes – Route Values

66 66 Routes – Constraints

67 67 Routes – Testing "~/austinCodeCamp/attendees/new".ShouldMapTo ( x => x.New("austinCodeCamp")); "~/austinCodeCamp/attendees/123/bob-johnson".ShouldMapTo ( x => x.Show("austinCodeCamp", 123)); "~/login".ShouldMapTo (x => x.Login()); "~/conference/new".ShouldMapTo (x => x.New());

68 68 Routes – Infinite Flexibility

69

70 70 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

71

72 72 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


Download ppt "ASP.NET MVC in Action Austin Code Camp, 2009 Jeffrey Palermo Chief Technology Officer Headspring Systems."

Similar presentations


Ads by Google