ASP.NET MVC è un framework sviluppato da Microsoft che permette di sviluppare applicazioni web utilizzando il pattern Model-View-Controller. Questo pattern, e (in questa sessione) la sua implementazione realizzata da Microsoft, si propone di apportare alcuni benefici: Maggiore controllo del markup della pagina, URL più leggibili Facilità di integrazione con librerie AJAX, chiara separazione dei ruoli/responsabilità tra layer, facilitando i test e la manutenzione dell'applicazione, supporto per test-driven development. Nella sessione andremo in dettaglio nella versione 2 di ASP.NET MVC, e con esempi pratici daremo risposta alle domande più frequenti, e a molte altre. Quando si utilizza ASP.NET MVC? Come si utilizza ASP.NET MVC? Semplifica davvero la manutenzione dell'applicazione? E' realmente testabile? Cosa guadagno ad usare ASP.NET MVC?
2. 09/04/2010www.xedotnet.org2MVC o Web Form?Cos’è il pattern MVC?In dettaglioModelView ControllerCome si usa ASP.NET MVC?Cosa devo conoscere per usare MVC?Perchè/quando usare ASP.NET MVC?
3. 09/04/2010www.xedotnet.org3MVC non sostituisce le WebFormMVC si pone come alternativa ad WebFormSi poteva, e si può, controllare il codice HTML prodotto anche con ASP.NET WebFormCSS Friendly AdapterAdaptive RenderingASP.NET 4.0 ...Si dovrà capire dov’è il vantaggio ad utilizzare MVC e dove WebFormMVC non sostituisce le WebForm
4. ASP.NET MVCASP.NET MVC vsWebFormASP.NETWebFormApplicazioni RADNon richiede particolari conoscenze del webViewState e PostBackModello Event-DrivenFacilitàcontrollo HTML e JavascriptPensato per scenari SEO e RESTFacilmentetestabileCoreASP.NETLinguaggi C#, VB.NET
9. Routing09/04/2010www.xedotnet.org5Gli obiettivi di ASP.NET MVCRealizzare applicazioni che seguano il pattern Model-View-ControllerSeparazione dei compiti all’interno dell’applicazioneCompleto controllo del codice HTML prodottoConsente di avere URL SEO FriendlyAgevolare il Test Driven DevelopmentFacilità di integrazione con ASP.NET AJAX e jQueryGli obiettivi di MVC Framework
10. 09/04/2010www.xedotnet.org6MVC – il patternNon è un pattern recente ma risale agli anni ‘70Originalmente utilizzato in Smalltalk per la realizzazione di interfacce grafichePermette di separare i compiti all’interno dell’applicazione tra Model, View e ControllerMVC – il pattern
12. 09/04/2010www.xedotnet.org8ASP.NET MVC – MODELPuò anche essere composto utilizzando LINQ to SQL oppure Entity FrameworkPer convenzione il nome del file dovrebbe corrispondere a quello del rispettivo controller: <Nome del model>ModelContenuto nella cartella ~/Models/Tramite attributi nelle classi e proprietà vengono specificate le regole di validazione e di visualizzazioneStessi attributi utilizzati anche in ASP.NET Dynamic DataMODEL (nel microsoft mvc)
13. 09/04/2010www.xedotnet.org9VIEWSi occupa di renderizzare le informazioniNon devono contenere logicaNon devono eseguire l’accesso ai datiI dati da visualizzare vengono forniti dal controllerVIEW (teoria)
14. 09/04/2010www.xedotnet.org10ASP.NET MVC – VIEWParagonabile al HTML markup di una pagina ASP.NETPuò essere composto da:ViewPageViewMasterPageDevono essere create in~/View/<ControllerName>/~/View/Shared/VIEW (nel microsoft mvc)
15. 09/04/2010www.xedotnet.org11ASP.NET MVC - PARTIAL VIEWViewUserControlSi possono vedere come gli UserControl di ASP.NETPossono avere acesso agli stessi dati della parent ViewHtml.RenderPartial("CommentInsert");Oppure accesso a parte dei dati del modelHtml.RenderPartial("DisplayNewsDescription", Model.Comments);I dati modificati nella partial View, non modificano i dati della parent ViewHanno solamente HTML markup (come per le View)PARTIAL VIEW (nel microsoft mvc)
17. 09/04/2010www.xedotnet.org13ASP.NET MVC – CONTROLLERContenuto nella cartella ~/Controllers/La classe deve ereditare dalla classe ControllerIl nome deve essere <Nome del controller>ControllerEsempiopublic class AccountController : ControllerDeve contenere almeno un metodo per ogni actionEsempio:public ActionResult LogOn()public ActionResult LogOn(LogOnModel model, string returnUrl)CONTROLLER (nel microsoft mvc)
18. MVC – il pattern09/04/2010www.xedotnet.org14Modelhttp://xedotnet.org/Products/http://xedotnet.org/Products/Edit/5ControllerViewProductsControllerProduct (Model)SQLProducts (View)/View/Products/Index.aspx/View/Products/Edit.aspx
19. 09/04/2010www.xedotnet.org15Passaggio di dati controller -> viewAttraversoil dictionary Controller.ViewDataViewData["Message"] = "Welcome to ASP.NET MVC!";La paginaereditadaSystem.Web.Mvc.ViewPageUtilizzandoStrongly Typed ClassesNews news = newsRepository.GetNewsById(id);return View(news);La paginapuòereditaredaSystem.Web.Mvc.ViewPage<T> per facilitare la scrittura del codice nella ViewPassaggio di dati controller -> view
20. 09/04/2010www.xedotnet.org16Passaggio di dati view -> controllerSubmit della form (HttpPost)Richiesta tramite AJAXPassaggio di dati view -> controller<% using (Html.BeginForm()) {%><fieldset> <%= Html.TextBoxFor(model => model.Author)%> <p> <input type="submit" value="Create" /> </p></fieldset><% } %>var action = "/Admin/News/Delete/" + recordId;var request = new Sys.Net.WebRequest(); request.set_httpVerb("DELETE"); request.set_url(action);request.add_completed(deleteCompleted); request.invoke();
21. 09/04/2010www.xedotnet.org17HTML HelperPermette di agevolare la creazione di controlli HTML per la visualizzazione/modifica dei dati del modelV 1.0Solo tramite stringheEsegnalazione errori solo a run-timeV 2.0Uso di lambda expressionSegnalazione errori a compile-timeHTML Helper
23. 09/04/2010www.xedotnet.org19AreasPermette di suddividere l’applicazione in sotto-applicazioni MVCMaggiore separazione dei compiti/ruoliMaggiore controllo del codice nell’applicazioneRoutingControllers, Models e ViewPermessiAreas
24. HTML.RenderActionHTML.RenderActionPossibilità di renderizzare una porzione della pagina utilizzando una PartilaView popolata da una specifica action (di uno specifico controller)V1.0: Html.RenderPartial riutilizzo solo una porzione della viewV 2.0: Html.RenderAction e Html.ActionChiamo un Action Method dalla View Posso riutilizzare anche la Business Logichttp://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx09/04/2010www.xedotnet.org20
25. 09/04/2010www.xedotnet.org21jQueryE’ incluso nel template di progetto MVCLibreria javascript di terze parti(Microsoft ha iniziato a supportarne lo sviluppo)Fornisce un framework client che permette di manipolare con facilità di DOM della pagina, stili e animazioni.jQuery
26. Controller AsincroniPossibilità di utilizzare Controller AsincroniGestione simile a quella delle Web FormSituazioni di thread StarvationThread del pool «schedula» l’esecuzioneIn genere:I/O usato moltoNo se viene usata tanta CPUSi vuole cancellare un’operazione Long-Runninghttp://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspxhttp://blog.stevensanderson.com/2010/01/25/measuring-the-performance-of-asynchronous-controllers/09/04/2010www.xedotnet.org22