Upload
xedotnet
View
2.397
Download
0
Embed Size (px)
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?
Citation preview
In collaborazione con
Microsoft ASP.NET MVC 2
» Andrea Dottor – Microsoft MVP ASP/ASP.NET
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?
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
» 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
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
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
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
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)
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
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)
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)
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
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)
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
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
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><% } %>
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
» 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
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
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
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
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
www.xedotnet.org 23
blog:
email:
web:
twitter:
Link
09/04/2010
»Andrea Dottor
blog.dottor.net
www.dottor.net
twitter.com/dottor