37
ASP.NET MVC: CONTROLLERS & VIEWS Jess Chadwick Lead Code Monkey Infragistics Website Team Todd Snyder Development Team Lead Infragistics Experience Design Group

Jess Chadwick Lead Code Monkey Infragistics Website Team Todd Snyder Development Team Lead Infragistics Experience Design Group

Embed Size (px)

Citation preview

ASP.NET MVC:

CONTROLLERS & VIEWS

Jess ChadwickLead Code MonkeyInfragistics Website Team

Todd SnyderDevelopment Team Lead

Infragistics Experience Design Group

Model – View - Controller

Model

Controlle

rView

Controller – The Traffic Cop

Handles User Input Interacts with Model/Data Select View to Render

Controllers MVC - WebForm

ASP.NET Page Lifecycle

Request FlowRequest

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);}

ASP.NET MVC: Views

Model – View - Controller

Model

ControllerView

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

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

No, not <form runat=“server”>…

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

Q & A(thanks!)

Jess ChadwickEmail: [email protected] Blog: http://blog.jesschadwick.com

Todd SnyderEmail: [email protected] Blog: http://blogs.infragistics.com/blogs/tsnyder

The Bits ASP.NET MVC Preview 3: http://asp.net/MVCASP.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

Jess Chadwick

[email protected]

http://blog.jesschadwick.com

Todd Snyder

[email protected]

http://blogs.infragistics.com/blogs/tsnyder

Resources