23
In collaborazione con Microsoft ASP.NET MVC 2 » Andrea Dottor Microsoft MVP ASP/ASP.NET

ASP.NET MVC 2.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

Page 1: ASP.NET MVC 2.0

In collaborazione con

Microsoft ASP.NET MVC 2

» Andrea Dottor – Microsoft MVP ASP/ASP.NET

Page 2: ASP.NET MVC 2.0

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

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

» 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

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

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

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

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

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

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

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

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

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

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

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

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

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

» 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

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

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

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

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

www.xedotnet.org 23

blog:

email:

web:

twitter:

Link

09/04/2010

»Andrea Dottor

blog.dottor.net

[email protected]

www.dottor.net

twitter.com/dottor