Jess Chadwick Lead Code Monkey Infragistics Website Team Todd Snyder Development Team Lead Infragistics Experience Design Group
Model – View - Controller Model Controller View
Controller – The Traffic Cop Handles User Input Interacts with Model/Data Select View to Render
Controllers MVC - WebForm
ASP.NET Page Lifecycle
Request Flow Request HTTP Routing Route Route Handler Http Handler Controller View Engine View Response
Controllers – Page Routing
Controllers – Actions
Controllers – Defining Actions
Controllers – Parameters RouteData: Contains Name/Value Pairs Form, Query String, and/or Cookie Missing Reference/Nullable Types set to null Nullable optional parameters Base class: Request and Response Methods
Controllers – Action Results ViewResult RedirectResult RedirectToRouteResult ContentResult JsonResult EmptyResult
Controllers – Attributes PrincipalPermission NonAction ActionFilter
Controllers – Action Filters Attach additional behaviors to actions Before & After Action Execution Before & After Result Execution Useful for logging, compression, etc.
Controllers – Unit Testing
Testing Controller Actions No requirement to test within ASP.NET runtime! Use RhinoMocks, TypeMock, Moq, etc. Create Test versions of the parts of the runtime you want to stub [TestMethod] public void ShowPostsDisplayPostView() { TestPostRepository rep = new TestPostRepository(); BlogController controller = new BlogController(rep); var result = controller.ShowPost(2); Assert.AreEqual("showpost", result.ViewName); Assert.IsTrue(repository.GetPostByIdWasCalled); Assert.AreEqual(2, repository.LastRequestedPostId); } [TestMethod] public void ShowPostsDisplayPostView() { TestPostRepository rep = new TestPostRepository(); BlogController controller = new BlogController(rep); var result = controller.ShowPost(2); Assert.AreEqual("showpost", result.ViewName); Assert.IsTrue(repository.GetPostByIdWasCalled); Assert.AreEqual(2, repository.LastRequestedPostId); }
ASP.NET MVC: Views
Model – View - Controller Model Controller View
Views – What are they? Render output Usually pretty “stupid”
It’s all about the “ViewData” Views - Working with Data
Views - Strongly-Typed Data Inherits ViewPage DEMO: Strongly-Typed View
Views - Weakly-Typed Data Inherits ViewPage DEMO: Weakly-Typed View
“I can see!” View Engines
View Engines - Definition Figure out how to render the markup View Locator finds the template Pluggable Web Forms, Nvelocity, Brail, Nhaml, etc. Roll your own Implement IViewEngine
View Engines - WebFormViewEngine Default engine based on Web Forms markup Familiar Environment Layout:.master Content:.aspx User Controls:.ascx
View Engines - WebFormViewLocator Standard, default layout: /Views /{Controller Name} /*.aspx /*.ascx /Shared /*.master /*.aspx /*.ascx
Think of them as your personal assistants. UI Helpers
Why do we need UI Helpers? More control = less done for you Avoid writing “boring” markup Encapsulate what varies Replace Web Forms server controls
Extension Methods Revisited New.NET 3.0 feature Static Methods posing as built-in behavior Make your life a whole lot easier Allow easy extensibility!
UI Helpers - Common/Useful Helpers Form HelpersUrl/Link/Content Helpers Html.Hidden() Html.TextBox() Html.TextArea() Html.RadioButton() Html.RadioButtonList() Html.DropDownList() method(name, value, attributes) Html.ActionLink () Html.RouteLink() Html.Encode() Html.AttributeEncode() Url.Action() Url.RouteUrl() Url.Encode(contentPath) Url.Content(contentPath)
No, not … Back to basics! DEMO: Working with Forms
Rendering Components
User Controls Extension Methods Html.RenderUserControl(virtualPath) Html.RenderUserControl(virtualPath, data) Server Controls Traditional Web Forms style! Third-Party Controls DEMO: Create and use a user control
Enriching the Client Experience
ASP.NET AJAX? Nope!
Filling the Gap Roll your own Popular Frameworks jQuery prototype JavaScriptMVC Rico script.aculo.us ASP.NET AJAX (client library) DEMO: MVC & ASP.NET AJAX
Jess Chadwick Blog: Todd Snyder Blog:
The Bits ASP.NET MVC Preview 3: ASP.NET MVC Source Code: Quickstart Videos ASP.NET: MIX: Community/Blogs ASP.NET Forums: Scott Guthrie (ScottGu): Scott Hanselman: Phil Haack: Sample Apps MVC Samples: CodeCampServer: Jess Chadwick Todd Snyder Resources