jess chadwick lead code monkey infragistics website team todd snyder development team lead...

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

Upload: tyrone-james

Post on 25-Dec-2015

222 views

Category:

Documents


1 download

TRANSCRIPT

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