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/2010 www.xedotnet.org 2 MVC o Web Form? Cos’è il pattern MVC? In dettaglio Model View Controller Come si usa ASP.NET MVC? Cosa devo conoscere per usare MVC? Perchè/quando usare ASP.NET MVC?
3. 09/04/2010 www.xedotnet.org 3 MVC non sostituisce le WebForm MVC si pone come alternativa ad WebForm Si poteva, e si può, controllare il codice HTML prodotto anche con ASP.NET WebForm CSS Friendly Adapter Adaptive Rendering ASP.NET 4.0 ... Si dovrà capire dov’è il vantaggio ad utilizzare MVC e dove WebForm MVC non sostituisce le WebForm
10. 09/04/2010 www.xedotnet.org 6 MVC – il pattern Non è un pattern recente ma risale agli anni ‘70 Originalmente utilizzato in Smalltalk per la realizzazione di interfacce grafiche Permette di separare i compiti all’interno dell’applicazione tra Model, View e Controller MVC – il pattern
11. 09/04/2010 www.xedotnet.org 7 MODEL Contiene l’object model dell’applicazione Contiene lo strato di accesso ai dati Contiene le regole di validazione MODEL (teoria)
12. 09/04/2010 www.xedotnet.org 8 ASP.NET MVC – MODEL Può anche essere composto utilizzando LINQ to SQL oppure Entity Framework Per convenzione il nome del file dovrebbe corrispondere a quello del rispettivo controller: <Nome del model>Model Contenuto nella cartella ~/Models/ Tramite attributi nelle classi e proprietà vengono specificate le regole di validazione e di visualizzazione Stessi attributi utilizzati anche in ASP.NET Dynamic Data MODEL (nel microsoft mvc)
13. 09/04/2010 www.xedotnet.org 9 VIEW Si occupa di renderizzare le informazioni Non devono contenere logica Non devono eseguire l’accesso ai dati I dati da visualizzare vengono forniti dal controller VIEW (teoria)
14. 09/04/2010 www.xedotnet.org 10 ASP.NET MVC – VIEW Paragonabile al HTML markup di una pagina ASP.NET Può essere composto da: ViewPage ViewMasterPage Devono essere create in ~/View/<ControllerName>/ ~/View/Shared/ VIEW (nel microsoft mvc)
15. 09/04/2010 www.xedotnet.org 11 ASP.NET MVC - PARTIAL VIEW ViewUserControl Si possono vedere come gli UserControl di ASP.NET Possono avere acesso agli stessi dati della parent View Html.RenderPartial("CommentInsert"); Oppure accesso a parte dei dati del model Html.RenderPartial("DisplayNewsDescription", Model.Comments); I dati modificati nella partial View, non modificano i dati della parent View Hanno solamente HTML markup (come per le View) PARTIAL VIEW (nel microsoft mvc)
16. 09/04/2010 www.xedotnet.org 12 CONTROLLER Si occupa dell’iterazione tra Model e View Riceve l’input dell’utente e lo elabora per fornire i dati corretti alla View CONTROLLER (teoria)
17. 09/04/2010 www.xedotnet.org 13 ASP.NET MVC – CONTROLLER Contenuto nella cartella ~/Controllers/ La classe deve ereditare dalla classe Controller Il nome deve essere <Nome del controller>Controller Esempio public class AccountController : Controller Deve contenere almeno un metodo per ogni action Esempio: public ActionResult LogOn() public ActionResult LogOn(LogOnModel model, string returnUrl) CONTROLLER (nel microsoft mvc)
18. MVC – il pattern 09/04/2010 www.xedotnet.org 14 Model http://xedotnet.org/Products/http://xedotnet.org/Products/Edit/5 Controller View ProductsController Product (Model) SQL Products (View) /View/Products/Index.aspx /View/Products/Edit.aspx
19. 09/04/2010 www.xedotnet.org 15 Passaggio di dati controller -> view Attraversoil dictionary Controller.ViewData ViewData["Message"] = "Welcome to ASP.NET MVC!"; La paginaereditadaSystem.Web.Mvc.ViewPage UtilizzandoStrongly Typed Classes News news = newsRepository.GetNewsById(id);return View(news); La paginapuòereditaredaSystem.Web.Mvc.ViewPage<T> per facilitare la scrittura del codice nella View Passaggio di dati controller -> view
20. 09/04/2010 www.xedotnet.org 16 Passaggio di dati view -> controller Submit della form (HttpPost) Richiesta tramite AJAX Passaggio 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/2010 www.xedotnet.org 17 HTML Helper Permette di agevolare la creazione di controlli HTML per la visualizzazione/modifica dei dati del model V 1.0 Solo tramite stringhe Esegnalazione errori solo a run-time V 2.0 Uso di lambda expression Segnalazione errori a compile-time HTML Helper
22. Validazione V 1.0 Server-side Validation V 2.0 Client-side Validation Data Annotation Model Validation Provider custom validation provider Validazione 09/04/2010 www.xedotnet.org 18
23. 09/04/2010 www.xedotnet.org 19 Areas Permette di suddividere l’applicazione in sotto-applicazioni MVC Maggiore separazione dei compiti/ruoli Maggiore controllo del codice nell’applicazione Routing Controllers, Models e View Permessi Areas
24. HTML.RenderAction HTML.RenderAction Possibilità 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 view V 2.0: Html.RenderAction e Html.Action Chiamo un Action Method dalla View Posso riutilizzare anche la Business Logic http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx 09/04/2010 www.xedotnet.org 20
25. 09/04/2010 www.xedotnet.org 21 jQuery E’ incluso nel template di progetto MVC Libreria 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 Asincroni Possibilità di utilizzare Controller Asincroni Gestione simile a quella delle Web Form Situazioni di thread Starvation Thread del pool «schedula» l’esecuzione In genere: I/O usato molto No se viene usata tanta CPU Si vuole cancellare un’operazione Long-Running http://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspxhttp://blog.stevensanderson.com/2010/01/25/measuring-the-performance-of-asynchronous-controllers/ 09/04/2010 www.xedotnet.org 22