KEMBAR78
Introduction To ASP.Net MVC | PPTX
Introduction to ASP.NET MVCJoe Wilson, PresidentVolare Systems, Inc.Email: joe@volaresystems.comOffice: 303-532-5838, ext 101Web: http://VolareSystems.comBlog: http://VolareSystems.com/BlogTwitter: joe_in_denver
Quick Audience PollWho has done classic ASP development? Who has used Web Forms?Who has used MVC?
AgendaWhat is MVC?What problems is MVC trying to solve?Code!Drawbacks of MVCResources
What is MVC? M= ModelV= ViewC= Controller
What is MVC? – ViewsAre familiar .ASPX and .ASCX filesHolds user interface elements (HTML, CSS, JavaScript)Views should not contain much logicSimple “if”s or “foreach”es are OK
What is MVC? – ControllersAre .CS filesHolds commands and workflows in Actions (methods)Render Views, JSON, XML, RSS, File, etc.Works with Models for small logic and dataValidate user input before moving on
What is MVC? – ModelsAre .CS filesData to display in the ViewData posted from the View back to the ControllerGood place for validation attributesGood place for light, display-related logic (Full Name, Totals, IsUserLoggedIn, etc.)
What is MVC?Request (GET or POST)Routing EngineController (Action)ResponseView,JSON, File,XML, RSSModel
What is MVC?RequestResponseUILayerControllerViewApplication LayerView ModelApplication ServicesDomain ModelUtilitiesRepositories
What else is MVC?Part of ASP.NETNot an upgrade or replacement for Web FormsCan run side-by-side with Web Forms codeCookies, Session, Caching, etc. still work the sameExtensible for changing Routing, View Engine, Model Binders,  Action Filters, Controller Factories
What problem is MVC trying to solve?Problem: No Separation of Concerns guidanceDon’t just dump all your code in code behind filesMVC gives guidance about what kind of code goes where
What problem is MVC trying to solve?Style Sheets, ImagesControllersModelsJavaScriptViewsMaster PagesTests
What problem is MVC trying to solve?Problem: View State and Page BloatView state is really helpful for rapid developmentNot so nice for page sizeTrade-off of rapid development with server controls and large page sizeMVC 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 HTMLMVC controls keep their IDsEasier to navigate with JavaScript and jQueryEasier 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 URLsURLs without query stringsMore hackable, SEO-friendly URLs
What problem is MVC trying to solve?URLs for ASP.NET Web Formshttp://mysite.com/Shop.aspx?Category=Shirtshttp://mysite.com/Shop.aspx?ID=123URLs for ASP.NET MVChttp://mysite.com/Shop/Category/Shirtshttp://mysite.com/Shop/ID/123
What problem is MVC trying to solve?Problem: Web Forms code-behind testabilityCode behind files are hard to testHttpContext is hard to mockMVC provides mockable abstract classes (but mocking is still not as easy as it could be)
Code!
Drawbacks of MVCVisual Studio web controls can’t help you muchNo more OnClick server events for buttons, etc.Different enough to have a learning curveIdeas for better View engines still solidifying
Advanced Topics?  Future Lab?Best practices with MVC (View Models versus Domain Models, Application Services)Using IOC Containers with MVC and Controller FactoriesMocking of HttpContextBase, HttpResponseBase, HttpRequestBaseUsing ELMAH for error handling in MVCAJAX and REST/JSON requests with MVCMVC 2 new stuff

Introduction To ASP.Net MVC

  • 1.
    Introduction to ASP.NETMVCJoe Wilson, PresidentVolare Systems, Inc.Email: joe@volaresystems.comOffice: 303-532-5838, ext 101Web: http://VolareSystems.comBlog: http://VolareSystems.com/BlogTwitter: joe_in_denver
  • 2.
    Quick Audience PollWhohas done classic ASP development? Who has used Web Forms?Who has used MVC?
  • 3.
    AgendaWhat is MVC?Whatproblems is MVC trying to solve?Code!Drawbacks of MVCResources
  • 4.
    What is MVC?M= ModelV= ViewC= Controller
  • 5.
    What is MVC?– ViewsAre familiar .ASPX and .ASCX filesHolds user interface elements (HTML, CSS, JavaScript)Views should not contain much logicSimple “if”s or “foreach”es are OK
  • 6.
    What is MVC?– ControllersAre .CS filesHolds commands and workflows in Actions (methods)Render Views, JSON, XML, RSS, File, etc.Works with Models for small logic and dataValidate user input before moving on
  • 7.
    What is MVC?– ModelsAre .CS filesData to display in the ViewData posted from the View back to the ControllerGood place for validation attributesGood place for light, display-related logic (Full Name, Totals, IsUserLoggedIn, etc.)
  • 8.
    What is MVC?Request(GET or POST)Routing EngineController (Action)ResponseView,JSON, File,XML, RSSModel
  • 9.
    What is MVC?RequestResponseUILayerControllerViewApplicationLayerView ModelApplication ServicesDomain ModelUtilitiesRepositories
  • 10.
    What else isMVC?Part of ASP.NETNot an upgrade or replacement for Web FormsCan run side-by-side with Web Forms codeCookies, Session, Caching, etc. still work the sameExtensible for changing Routing, View Engine, Model Binders, Action Filters, Controller Factories
  • 11.
    What problem isMVC trying to solve?Problem: No Separation of Concerns guidanceDon’t just dump all your code in code behind filesMVC gives guidance about what kind of code goes where
  • 12.
    What problem isMVC trying to solve?Style Sheets, ImagesControllersModelsJavaScriptViewsMaster PagesTests
  • 13.
    What problem isMVC trying to solve?Problem: View State and Page BloatView state is really helpful for rapid developmentNot so nice for page sizeTrade-off of rapid development with server controls and large page sizeMVC has no View State
  • 14.
    What problem isMVC trying to solve?<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTY1MzUzMjI0Ng9kFgwCAg8VAXonaHBfbmxhX3RyZWUnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ2QCAw8VApQBJ2hwX25sYV9mcmVlJywgJ2hwVGVzdENlbGw9ZGVmYXVsdF9ubGEnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ3wnaHBfbmxhX3NlYXJjaCcsICdzaXRlPXVzJywgJ3BhcnRuZXI9dXMnLCAnbG9nZ2VkaW49RmFsc2UnLCAnaW5zdD1GYWxzZScsICdwcm9tb0VsaWdpYmxlPVRydWUnLCAnbGFuZ3VhZ2U9RW5nbGlzaCcsICdocD1ubGEnZAIIDxUBfCdocF9ubGFfd2lkZ2V0JywgJ3NpdGU9dXMnLCAncGFydG5lcj11cycsICdsb2dnZWRpbj1GYWxzZScsICdpbnN0PUZhbHNlJywgJ3Byb21vRWxpZ2libGU9VHJ1ZScsICdsYW5ndWFnZT1FbmdsaXNoJywgJ2hwPW5sYSdkAgsPFQF4J2hwX25sYV9yMicsICdzaXRlPXVzJywgJ3BhcnRuZXI9dXMnLCAnbG9nZ2VkaW49RmFsc2UnLCAnaW5zdD1GYWxzZScsICdwcm9tb0VsaWdpYmxlPVRydWUnLCAnbGFuZ3VhZ2U9RW5nbGlzaCcsICdocD1ubGEnZAINDxUBeCdocF9ubGFfcjMnLCAnc2l0ZT11cycsICdwYXJ0bmVyPXVzJywgJ2xvZ2dlZGluPUZhbHNlJywgJ2luc3Q9RmFsc2UnLCAncHJvbW9FbGlnaWJsZT1UcnVlJywgJ2xhbmd1YWdlPUVuZ2xpc2gnLCAnaHA9bmxhJ2QCDw9kFgJmD2QWAmYPZBYIAgEPZBYEAgIPFQIZY3RsMDRfY3RsMDBfbV9JRTZfb3ZlcmxheRtjdGwwNF9jdGwwMF9tX0lFNl9jb250YWluZXJkAgoPFQIZY3RsMDRfY3RsMDBfbV9JRTZfb3ZlcmxheRtjdGwwNF9jdGwwMF9tX0lFNl9jb250YWluZXJkAgIPZBYCZg8VAQEwZAIDDxYCHgdWaXNpYmxlaGQCBA8WAh8AZxYCAgEPZBY4Zg8VAhB3d3cuYW5jZXN0cnkuY29tCEFib3V0IFVzZAIBDxUCEHd3dy5hbmNlc3RyeS5jb20IUGFydG5lcnNkAgIPFQIxaHR0cDovL2FuY2VzdHJ5LmN1c3RoZWxwLmNvbS9jZ2ktYmluL2FuY2VzdHJ5LmNmZwpDb250YWN0IFVzZAIDDxUCAApDb250YWN0IFVzZAIEDxUCMWh0dHA6Ly9hbmNlc3RyeS5jdXN0aGVscC5jb20vY2dpLWJpbi9hbmNlc3RyeS5jZmcKQ29udGFjdCBVc2QCBQ8VAjFodHRwOi8vYW5jZXN0cnkuY3VzdGhlbHAuY29tL2NnaS1iaW4vYW5jZXN0cnkuY2ZnCkNvbnRhY3QgVXNkAgYPFQEdQWJlbnRldWVyIEFobmVuZm9yc2NodW5nIEJsb2dkAgcPFQIQd3d3LmFuY2VzdHJ5LmNvbQpBZmZpbGlhdGVzZAIIDxUCEHd3dy5hbmNlc3RyeS5jb20KQWZmaWxpYXRlc2QCCQ8VAhB3d3cuYW5jZXN0cnkuY29tCkFmZmlsaWF0ZXNkAgoPFQIQd3d3LmFuY2VzdHJ5LmNvbQVMZWdhbGQCCw8VAhB3d3cuYW5jZXN0cnkuY29tC0FkdmVydGlzaW5nZAIMDxUCEHd3dy5hbmNlc3RyeS5jb20LQWR2ZXJ0aXNpbmdkAg4PFQEQd3d3LmFuY2VzdHJ5LmNvbWQCDw8VAhB3d3cuYW5jZXN0cnkuY29tATBkAhAPFQExaHR0cDovL3d3dy5hbmNlc3RyeS5jb20vSG9tZVJlZGlyZWN0LmFzcHg/cmVmPTBVS2QCEQ8VARlodHRwOi8vd3d3LmFuY2VzdHJ5LmNvLnVrZAISDxUCIGh0dHA6Ly93d3cuYW5jZXN0cnkuY2E/bGNpZD00MTA1IGh0dHA6Ly93d3cuYW5jZXN0cnkuY2E/bGNpZD0zMDg0ZAITDxUBMWh0dHA6Ly93d3cuYW5jZXN0cnkuY29tL0hvbWVSZWRpcmVjdC5hc3B4P3JlZj0wQVVkAhQPFQEaaHR0cDovL3d3dy5BbmNlc3RyeS5jb20uYXVkAhUPFQIWaHR0cDovL3d3dy5BbmNlc3RyeS5kZRZodHRwOi8vd3d3LmFuY2VzdHJ5Lml0ZAIWDxUBMWh0dHA6Ly93d3cuYW5jZXN0cnkuY29tL0hvbWVSZWRpcmVjdC5hc3B4P3JlZj0wRlJkAhcPFQEWaHR0cDovL3d3dy5hbmNlc3RyeS5mcmQCGA8VATFodHRwOi8vd3d3LmFuY2VzdHJ5LmNvbS9Ib21lUmVkaXJlY3QuYXNweD9yZWY9MFNFZAIZDxUBFmh0dHA6Ly93d3cuYW5jZXN0cnkuc2VkAhsPFQEMQW5jZXN0cnkuY29tZAIdDxUBFUNvcnBvcmF0ZSBJbmZvcm1hdGlvbmQCHg8VBBB3d3cuYW5jZXN0cnkuY29tDlBSSVZBQ1kgUE9MSUNZEHd3dy5hbmNlc3RyeS5jb20UVGVybXMgYW5kIENvbmRpdGlvbnNkZI5o1QBkDUPswAnGKLEp0SlZ+Rv+" />Guess which site?
  • 15.
    What problem isMVC trying to solve?
  • 16.
    What problem isMVC trying to solve?Problem: Messy HTMLMVC controls keep their IDsEasier to navigate with JavaScript and jQueryEasier to build XHTML and Section 508 compliant sites
  • 17.
    What problem isMVC 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” />
  • 18.
    What problem isMVC trying to solve?Problem: Messy URLsURLs without query stringsMore hackable, SEO-friendly URLs
  • 19.
    What problem isMVC trying to solve?URLs for ASP.NET Web Formshttp://mysite.com/Shop.aspx?Category=Shirtshttp://mysite.com/Shop.aspx?ID=123URLs for ASP.NET MVChttp://mysite.com/Shop/Category/Shirtshttp://mysite.com/Shop/ID/123
  • 20.
    What problem isMVC trying to solve?Problem: Web Forms code-behind testabilityCode behind files are hard to testHttpContext is hard to mockMVC provides mockable abstract classes (but mocking is still not as easy as it could be)
  • 21.
  • 22.
    Drawbacks of MVCVisualStudio web controls can’t help you muchNo more OnClick server events for buttons, etc.Different enough to have a learning curveIdeas for better View engines still solidifying
  • 23.
    Advanced Topics? Future Lab?Best practices with MVC (View Models versus Domain Models, Application Services)Using IOC Containers with MVC and Controller FactoriesMocking of HttpContextBase, HttpResponseBase, HttpRequestBaseUsing ELMAH for error handling in MVCAJAX and REST/JSON requests with MVCMVC 2 new stuff
  • 24.
    ResourcesLearning ASP.NET MVCASP.NETMVC official site - http://www.asp.net/mvcCommunity Four MVC - http://www.c4mvc.netKeeping up with changes to ASP.NET MVCPhil Haack’s Blog - http://haacked.comScott Guthrie’s Blog - http://weblogs.asp.net/scottguAdvanced ASP.NET MVCSharp Architecture - http://sharparchitecture.netEric Hexter’s Blog - http://lostechies.com/blogs/hexJimmy Bogard’s Blog - http://lostechies.com/blogs/jimmy_bogardEmail: joe@volaresystems.comOffice: 303-532-5838, ext 101Web: http://VolareSystems.comBlog: http://VolareSystems.com/BlogTwitter: joe_in_denver