Download presentation
Presentation is loading. Please wait.
Published bySheena Rice Modified over 9 years ago
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.
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
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
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
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
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
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.