ASP.NET MVC 2.0

Preview:

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

andrea@dottor.net

www.dottor.net

twitter.com/dottor