ASP.NET MVC: Views

adhocjackpotΑσφάλεια

5 Νοε 2013 (πριν από 3 χρόνια και 5 μήνες)

138 εμφανίσεις

ASP.NET MVC:



CONTROLLERS & VIEWS

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

}

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

Email:

jesschadwick@gmail.com


Blog:

http://blog.jesschadwick.com


Todd Snyder

Email:

tsnyder@infragistics.com


Blog:

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





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




Jess Chadwick

jesschadwick@gmail.com

http://
blog.jesschadwick.com

Todd
Snyder

tsnyder@infragistics.com

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






Resources