introduction to asp.net mvc

Post on 21-May-2015

1.413 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Introduction to ASP.NET MVC

Joe Wilson, PresidentVolare Systems, Inc.

Email: joe@volaresystems.comOffice: 303-532-5838, ext 101

Web: http://VolareSystems.comBlog: http://VolareSystems.com/Blog

Twitter: joe_in_denver

Quick Audience Poll

Who has done classic ASP

development?

Who has used Web Forms?

Who has used MVC?

Agenda

What is MVC?

What problems is MVC trying to solve?

Code!

Drawbacks of MVC

Resources

What is MVC?

M = Model

V = View

C = Controller

What is MVC? – Views

Are familiar .ASPX and .ASCX files

Holds user interface elements (HTML, CSS,

JavaScript)

Views should not contain much logic

Simple “if”s or “foreach”es are OK

What is MVC? – Controllers

Are .CS files

Holds commands and workflows in Actions

(methods)

Render Views, JSON, XML, RSS, File, etc.

Works with Models for small logic and data

Validate user input before moving on

What is MVC? – Models

Are .CS files

Data to display in the View

Data posted from the View back to the Controller

Good place for validation attributes

Good place for light, display-related logic (Full

Name, Totals, IsUserLoggedIn, etc.)

What is MVC?

Routing Engine

Controller (Action)

View,JSON, File,

XML, RSS

Model

Request (GET or POST)

Response

What is MVC?

Controller View

View Model

Domain Model

Repositories

Utilities

Application Services

UILayer

Application Layer

Request Response

What else is MVC?

Part of ASP.NET

Not an upgrade or replacement for Web Forms

Can run side-by-side with Web Forms code

Cookies, Session, Caching, etc. still work the

same

Extensible for changing Routing, View Engine,

Model Binders, Action Filters, Controller Factories

What problem is MVC trying to solve?

Problem: No Separation of Concerns guidance

Don’t just dump all your code in code behind files

MVC gives guidance about what kind of code

goes where

What problem is MVC trying to solve?

Style Sheets, Images

Controllers

ModelsJavaScript

Views

Master Pages

Tests

What problem is MVC trying to solve?

Problem: View State and Page Bloat

View state is really helpful for rapid development

Not so nice for page size

Trade-off of rapid development with server

controls and large page size

MVC has no View State

What problem is MVC trying to solve?<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"

value="/wEPDwUKMTY1MzUzMjI0Ng9kFgwCAg8VAXonaHBfbmxhX3RyZWUnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ2QCAw8VApQBJ2hwX25sYV9mcmVlJywgJ2hwVGVzdENlbGw9ZGVmYXVsdF9ubGEnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ3wnaHBfbmxhX3NlYXJjaCcsICdzaXRlPXVzJywgJ3BhcnRuZXI9dXMnLCAnbG9nZ2VkaW49RmFsc2UnLCAnaW5zdD1GYWxzZScsICdwcm9tb0VsaWdpYmxlPVRydWUnLCAnbGFuZ3VhZ2U9RW5nbGlzaCcsICdocD1ubGEnZAIIDxUBfCdocF9ubGFfd2lkZ2V0JywgJ3NpdGU9dXMnLCAncGFydG5lcj11cycsICdsb2dnZWRpbj1GYWxzZScsICdpbnN0PUZhbHNlJywgJ3Byb21vRWxpZ2libGU9VHJ1ZScsICdsYW5ndWFnZT1FbmdsaXNoJywgJ2hwPW5sYSdkAgsPFQF4J2hwX25sYV9yMicsICdzaXRlPXVzJywgJ3BhcnRuZXI9dXMnLCAnbG9nZ2VkaW49RmFsc2UnLCAnaW5zdD1GYWxzZScsICdwcm9tb0VsaWdpYmxlPVRydWUnLCAnbGFuZ3VhZ2U9RW5nbGlzaCcsICdocD1ubGEnZAINDxUBeCdocF9ubGFfcjMnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ2QCDw9kFgJmD2QWAmYPZBYIAgEPZBYEAgIPFQIZY3RsMDRfY3RsMDBfbV9JRTZfb3ZlcmxheRtjdGwwNF9jdGwwMF9tX0lFNl9jb250YWluZXJkAgoPFQIZY3RsMDRfY3RsMDBfbV9JRTZfb3ZlcmxheRtjdGwwNF9jdGwwMF9tX0lFNl9jb250YWluZXJkAgIPZBYCZg8VAQEwZAIDDxYCHgdWaXNpYmxlaGQCBA8WAh8AZxYCAgEPZBY4Zg8VAhB3d3cuYW5jZXN0cnkuY29tCEFib3V0IFVzZAIBDxUCEHd3dy5hbmNlc3RyeS5jb20IUGFydG5lcnNkAgIPFQIxaHR0cDovL2FuY2VzdHJ5LmN1c3RoZWxwLmNvbS9jZ2ktYmluL2FuY2VzdHJ5LmNmZwpDb250YWN0IFVzZAIDDxUCAApDb250YWN0IFVzZAIEDxUCMWh0dHA6Ly9hbmNlc3RyeS5jdXN0aGVscC5jb20vY2dpLWJpbi9hbmNlc3RyeS5jZmcKQ29udGFjdCBVc2QCBQ8VAjFodHRwOi8vYW5jZXN0cnkuY3VzdGhlbHAuY29tL2NnaS1iaW4vYW5jZXN0cnkuY2ZnCkNvbnRhY3QgVXNkAgYPFQEdQWJlbnRldWVyIEFobmVuZm9yc2NodW5nIEJsb2dkAgcPFQIQd3d3LmFuY2VzdHJ5LmNvbQpBZmZpbGlhdGVzZAIIDxUCEHd3dy5hbmNlc3RyeS5jb20KQWZmaWxpYXRlc2QCCQ8VAhB3d3cuYW5jZXN0cnkuY29tCkFmZmlsaWF0ZXNkAgoPFQIQd3d3LmFuY2VzdHJ5LmNvbQVMZWdhbGQCCw8VAhB3d3cuYW5jZXN0cnkuY29tC0FkdmVydGlzaW5nZAIMDxUCEHd3dy5hbmNlc3RyeS5jb20LQWR2ZXJ0aXNpbmdkAg4PFQEQd3d3LmFuY2VzdHJ5LmNvbWQCDw8VAhB3d3cuYW5jZXN0cnkuY29tATBkAhAPFQExaHR0cDovL3d3dy5hbmNlc3RyeS5jb20vSG9tZVJlZGlyZWN0LmFzcHg/cmVmPTBVS2QCEQ8VARlodHRwOi8vd3d3LmFuY2VzdHJ5LmNvLnVrZAISDxUCIGh0dHA6Ly93d3cuYW5jZXN0cnkuY2E/bGNpZD00MTA1IGh0dHA6Ly93d3cuYW5jZXN0cnkuY2E/bGNpZD0zMDg0ZAITDxUBMWh0dHA6Ly93d3cuYW5jZXN0cnkuY29tL0hvbWVSZWRpcmVjdC5hc3B4P3JlZj0wQVVkAhQPFQEaaHR0cDovL3d3dy5BbmNlc3RyeS5jb20uYXVkAhUPFQIWaHR0cDovL3d3dy5BbmNlc3RyeS5kZRZodHRwOi8vd3d3LmFuY2VzdHJ5Lml0ZAIWDxUBMWh0dHA6Ly93d3cuYW5jZXN0cnkuY29tL0hvbWVSZWRpcmVjdC5hc3B4P3JlZj0wRlJkAhcPFQEWaHR0cDovL3d3dy5hbmNlc3RyeS5mcmQCGA8VATFodHRwOi8vd3d3LmFuY2VzdHJ5LmNvbS9Ib21lUmVkaXJlY3QuYXNweD9yZWY9MFNFZAIZDxUBFmh0dHA6Ly93d3cuYW5jZXN0cnkuc2VkAhsPFQEMQW5jZXN0cnkuY29tZAIdDxUBFUNvcnBvcmF0ZSBJbmZvcm1hdGlvbmQCHg8VBBB3d3cuYW5jZXN0cnkuY29tDlBSSVZBQ1kgUE9MSUNZEHd3dy5hbmNlc3RyeS5jb20UVGVybXMgYW5kIENvbmRpdGlvbnNkZI5o1QBkDUPswAnGKLEp0SlZ+Rv+" />

Guess which site?

What problem is MVC trying to solve?

What problem is MVC trying to solve?

Problem: Messy HTML

MVC controls keep their IDs

Easier to navigate with JavaScript and jQuery

Easier to build XHTML and Section 508 compliant

sites

What problem is MVC trying to solve?

HTML from Web Forms<span id="ctl00_MainContent_uxdPHAllContent_TripSelector_lblFromDate">From Date:</span><input type="text"

name="ctl00$MainContent$uxdPHAllContent$TripSelector$txtFromDate" id="ctl00_MainContent_uxdPHAllContent_TripSelector_txtFromDate" />

HTML from MVC<label for=“txtFromDate">From Date:</label><input type="text” name=“txtFromDate” id=“txtFromDate” />

What problem is MVC trying to solve?

Problem: Messy URLs

URLs without query strings

More hackable, SEO-friendly URLs

What problem is MVC trying to solve?

URLs for ASP.NET Web Formshttp://mysite.com/Shop.aspx?Category=Shirts

http://mysite.com/Shop.aspx?ID=123

URLs for ASP.NET MVChttp://mysite.com/Shop/Category/Shirts

http://mysite.com/Shop/ID/123

What problem is MVC trying to solve?

Problem: Web Forms code-behind testability

Code behind files are hard to test

HttpContext is hard to mock

MVC provides mockable abstract classes (but

mocking is still not as easy as it could be)

Code!

Drawbacks of MVC

Visual Studio web controls can’t help you much

No more OnClick server events for buttons, etc.

Different enough to have a learning curve

Ideas for better View engines still solidifying

ResourcesLearning ASP.NET MVC ASP.NET MVC official site - http://www.asp.net/mvc Community Four MVC - http://www.c4mvc.net

Keeping up with changes to ASP.NET MVC Phil Haack’s Blog - http://haacked.com Scott Guthrie’s Blog - http://weblogs.asp.net/scottgu

Advanced ASP.NET MVC Sharp Architecture - http://sharparchitecture.net Eric Hexter’s Blog - http://lostechies.com/blogs/hex Jimmy Bogard’s Blog - http://lostechies.com/blogs/jimmy_bogard

Email: joe@volaresystems.comOffice: 303-532-5838, ext 101

Web: http://VolareSystems.comBlog: http://VolareSystems.com/Blog

Twitter: joe_in_denver

top related