asp.net mvc 2.0
DESCRIPTION
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?TRANSCRIPT
![Page 1: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/1.jpg)
In collaborazione con
Microsoft ASP.NET MVC 2
» Andrea Dottor – Microsoft MVP ASP/ASP.NET
![Page 2: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/2.jpg)
www.xedotnet.org 2
AgendaAgenda
09/04/2010
» 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?
![Page 3: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/3.jpg)
www.xedotnet.org 309/04/2010
» 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
![Page 4: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/4.jpg)
» ASP.NET MVC
ASP.NET MVC vs WebForm
»Facilità controllo HTML e Javascript »Pensato per scenari SEO e REST»Facilmente testabile
» ASP.NET WebForm»Applicazioni RAD»Non richiede particolari conoscenze del web»ViewState e PostBack»Modello Event-Driven
Core ASP.NET»Linguaggi C#, VB.NET»MasterPage»Output Cache»Autenticazione e Autorizzazione»Globalizzazione»Routing
![Page 5: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/5.jpg)
www.xedotnet.org 509/04/2010
» Gli obiettivi di ASP.NET MVC• Realizzare applicazioni che seguano il pattern
Model-View-Controller• Separazione dei compiti all’interno dell’applicazione
• Completo controllo del codice HTML prodotto• Consente di avere URL SEO Friendly• Agevolare il Test Driven Development• Facilità di integrazione con ASP.NET AJAX e jQuery
Gli obiettivi di MVC Framework
![Page 6: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/6.jpg)
www.xedotnet.org 609/04/2010
» 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
Model
ControllerView
![Page 7: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/7.jpg)
www.xedotnet.org 709/04/2010
» MODEL• Contiene l’object model dell’applicazione• Contiene lo strato di accesso ai dati• Contiene le regole di validazione
MODEL (teoria)
Model
ControllerView
![Page 8: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/8.jpg)
www.xedotnet.org 809/04/2010
» 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)
![Page 9: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/9.jpg)
www.xedotnet.org 909/04/2010
» 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)
Model
ControllerView
![Page 10: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/10.jpg)
www.xedotnet.org 1009/04/2010
» 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)
![Page 11: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/11.jpg)
www.xedotnet.org 1109/04/2010
» 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)
![Page 12: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/12.jpg)
www.xedotnet.org 1209/04/2010
» 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)
Model
ControllerView
![Page 13: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/13.jpg)
www.xedotnet.org 1309/04/2010
» 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 actionEsempio:
• public ActionResult LogOn()• public ActionResult LogOn(LogOnModel model, string returnUrl)
CONTROLLER (nel microsoft mvc)
![Page 14: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/14.jpg)
www.xedotnet.org 14
MVC – il pattern
09/04/2010
Controller
View
Model SQL
http://xedotnet.org/Products/http://xedotnet.org/Products/Edit/5
ProductsController Product (Model)
Products (View)/View/Products/Index.aspx/View/Products/Edit.aspx
![Page 15: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/15.jpg)
www.xedotnet.org 1509/04/2010
» Passaggio di dati controller -> view• Attraverso il dictionary Controller.ViewData • ViewData["Message"] = "Welcome to ASP.NET MVC!";• La pagina eredita da System.Web.Mvc.ViewPage
• Utilizzando Strongly Typed Classes• News news = newsRepository.GetNewsById(id);
return View(news);• La pagina può ereditare da System.Web.Mvc.ViewPage<T>
per facilitare la scrittura del codice nella View
Passaggio di dati controller -> view
![Page 16: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/16.jpg)
www.xedotnet.org 1609/04/2010
» Passaggio di dati view -> controller• Submit della form (HttpPost)
• Richiesta tramite AJAX
Passaggio di dati view -> controller
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();
<% using (Html.BeginForm()) {%><fieldset> <%= Html.TextBoxFor(model => model.Author)%> <p> <input type="submit" value="Create" /> </p></fieldset><% } %>
![Page 17: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/17.jpg)
www.xedotnet.org 1709/04/2010
» 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
![Page 18: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/18.jpg)
» 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
![Page 19: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/19.jpg)
www.xedotnet.org 1909/04/2010
» 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
![Page 20: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/20.jpg)
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
![Page 21: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/21.jpg)
www.xedotnet.org 2109/04/2010
» 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
![Page 22: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/22.jpg)
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
![Page 23: ASP.NET MVC 2.0](https://reader033.vdocuments.pub/reader033/viewer/2022061200/5477d47cb4af9fde028b4635/html5/thumbnails/23.jpg)
www.xedotnet.org 23
blog:
email:
web:
twitter:
Link
09/04/2010
»Andrea Dottor
blog.dottor.net
www.dottor.net
twitter.com/dottor