370 likes | 631 Views
Todd Snyder Development Team Lead Infragistics Experience Design Group. Jess Chadwick Lead Code Monkey Infragistics Website Team. ASP.NET MVC: Controllers & Views. Model – View - Controller. Controller – The Traffic Cop. Handles User Input Interacts with Model/Data
E N D
Todd Snyder Development Team Lead Infragistics Experience Design Group Jess Chadwick Lead Code Monkey Infragistics Website Team ASP.NET MVC: Controllers & Views
Controller – The Traffic Cop • Handles User Input • Interacts with Model/Data • Select View to Render
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.
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); }
Views – What are they? • Render output • Usually pretty “stupid”
Views - Working with Data It’s all about the “ViewData”
Views - Strongly-Typed Data • Inherits ViewPage<TModel> • DEMO: Strongly-Typed View
Views - Weakly-Typed Data • Inherits ViewPage • DEMO: Weakly-Typed View
View Engines “I can see!”
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
UI Helpers Think of them as your personal assistants.
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 Helpers Url/Link/Content Helpers • Html.Hidden() • Html.TextBox() • Html.TextArea() • Html.RadioButton() • Html.RadioButtonList() • Html.DropDownList() method(name, value, attributes) • Html.ActionLink<T>() • Html.RouteLink() • Html.Encode() • Html.AttributeEncode() • Url.Action() • Url.RouteUrl() • Url.Encode(contentPath) • Url.Content(contentPath)
DEMO: Working with Forms No, not <form runat=“server”>… Back to basics!
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
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
Todd Snyder Email:tsnyder@infragistics.com Blog: http://blogs.infragistics.com/blogs/tsnyder Q & A(thanks!) Jess Chadwick Email:jesschadwick@gmail.com Blog: http://blog.jesschadwick.com
Jess Chadwick jesschadwick@gmail.com http://blog.jesschadwick.com Todd Snyder tsnyder@infragistics.com http://blogs.infragistics.com/blogs/tsnyder Resources • The Bits • ASP.NET MVC Preview 3: http://asp.net/MVC • ASP.NET MVC Source Code:http://www.codeplex.com/aspnet • Quickstart • http://quickstarts.asp.net/3-5-extensions/mvc/default.aspx • Videos • ASP.NET: http://www.asp.net/learn/3.5-extensions-videos/ • MIX: http://sessions.visitmix.com • Community/Blogs • ASP.NET Forums: http://forums.asp.net/1146.aspx • Scott Guthrie (ScottGu): http://weblogs.asp.net/scottgu/ • Scott Hanselman: http://www.hanselman.com/blog/ • Phil Haack: http://haacked.com/ • Sample Apps • MVC Samples: http://www.codeplex.com/mvcsamples • CodeCampServer: http://codecampserver.org