introduction to asp.net mvc
TRANSCRIPT
Introduction to ASP.NET MVC
Joe Wilson, PresidentVolare Systems, Inc.
Email: [email protected]: 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: [email protected]: 303-532-5838, ext 101
Web: http://VolareSystems.comBlog: http://VolareSystems.com/Blog
Twitter: joe_in_denver