SlideShare une entreprise Scribd logo
1  sur  66
ASP.NET MVC 3 Benedetti Stefano
Contatti Ing. Stefano Benedetti http://www.be-st.it http://blog.be-st.it info@be-st.it  Lo User Group dell'Emilia-Romagnainteramente dedicato alle tecnologie Microsoft .NET http://dotdotnet.org/
Agenda MVC Overview scaffolding supporto HTML 5 viewengineRazor miglioramenti sui controller nuove funzionalità Javascript e AJAX integrazione con NuGet miglior supporto alla DependencyInjection altre features
MVC Overview Pattern di presentazione
MVC Overview Originariamente impiegato dal linguaggio Smalltalk Smalltalk è stato sviluppato allo Xerox PARC durante gli anni settanta
Vantaggi SeparationofConcerns (SoC) UnitTesting DI Nessun viewstate Controllo completo dell’HTML Scomparsi i controlli server e gli ID autogenerati No PageLifeCycle Performance Semplicità
ASP.NETPage life cycle
MVC Routing Disaccoppiamento tra URL e pagina fisica /products /products/detail/1 /products/edit/1 /products/delete/1 Get Post Configurabile tramite Global.asax Convention overconfiguration ProductsController
Global.asx e MapRoute  public staticvoidRegisterRoutes(RouteCollectionroutes)  { routes.MapRoute(           "Default", // Routename           "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameterdefaults             );  }
MVC Routing www.sito/product public classProductController : Controller { public ViewResultIndex()      {varproducts = db.Products.Include(p => p.Brand); returnView(products.ToList()); 	} } Default Action (Index)
MVC Routing products/details/1 public classProductController : Controller {  public ViewResultDetails(intid)         { Productproduct = db.Products.Find(id); returnView(product);         } }
MVC Routing GET: /Product/Edit/5 public ActionResultEdit(intid)         { Productproduct = db.Products.Find(id); ViewBag.BrandId = new SelectList(db.Brands, "Id", "Name", product.BrandId); returnView(product);         }
MVC Routing e ModelBinding POST: /Product/Edit/5 [HttpPost] public ActionResultEdit(Productproduct)         { if (ModelState.IsValid)             { db.Entry(product).State = EntityState.Modified; db.SaveChanges(); returnRedirectToAction("Index");             } ViewBag.BrandId = new SelectList(db.Brands, "Id", "Name", product.BrandId); returnView(product);         }
Requisiti Per il runtimeASP.NET MVC 3: 	.NET Framework version4 ASP.NETMVC 3 Visual Studio 2010 tools: VisualStudio 2010 o Visual Web Developer 2010 Express
Installazione Side by side con MVC 2 Web PlatformInstaller (WebPI) http://www.microsoft.com/web/gallery/install.aspx?appid=MVC3 Download diretto http://go.microsoft.com/fwlink/?LinkID=208140
NuGet Library Package Manager Estensione di Visual Studio Automazione: Download Package folder Reference Web.config Configurazione custom Gestione update Post e guida di base su blog.be-st.it
NuGet DEMO
NuGet in MVC 3 Versione 1.2 Package pre-installati Modernizr Entity Framework Code First JQuery
Scaffolding Creazione dell’impalcatura “Add Controller” ha 3 modalità di scaffolding: Empty controller Controller withemptyread/writeactions Controller withread/writeactions and view, usingEntity Framework
Scaffolding Controller withread/writeactions and view, usingEntity Framework ,[object Object],Accesso ai dati Validazione One-to-manyrelationship
Scaffolding Alternativa: MVCScaffolding Package NuGet http://blog.stevensanderson.com Pro ASP.NET MVC V2 Framework
HTML 5 I template di progetto supportano HTML 5
HTML 5 Nuovi tag Header Footer Nav Section Validazione HTML 5 in VS 2010
HTML 5 La compatibilità  con i browser più vecchi è garantita da Modernizr Browser non HTML 5 <header> <nav> <section> <footer> ,[object Object]
Package NuGet,[object Object]
ViewEngine “Razor” Concisa Facile da imparare Intellisense e evidenziazione del codice Razor in Visual Studio
ViewEngine “Razor” Definizione del model: @model Commenti: @* *@ Impostazioni di default (ad es. layoutpage) Html senza encoding: Html.Raw Codice condiviso tra le view (_viewstart.cshtml) “Master page”: layout
Razor Layout
ViewEngineSupport Default Web Forms (ASPX) Razor Spark NHaml NDJango
Nuovi HTML Helpers Chart WebGrid Crypto WebImage WebMail
Chart DemoHtmlHelpersController  public ActionResult Chart()         { var key = new Chart(width: 600, height: 400)                 .AddSeries( chartType: "bar", legend: "Rainfall", xValue: new[] { "Jan", "Feb", "Mar", "Apr", "May" }, yValues: new[] { "20", "20", "40", "10", "10" })                 .Write(); returnnull;         }
Chart View <p>     <imgsrc="/DemoHtmlHelpers/Chart" alt="Chart" /> </p>
WebGrid  @{ vargrid = newWebGrid(source: Model, rowsPerPage: 3); } @grid.GetHtml(tableStyle: "grid", headerStyle: "head", alternatingRowStyle: "alt", columns: grid.Columns( grid.Column("Id"), grid.Column("Name")             )             ) <tableclass="grid"> <thead><trclass="head"> <trclass="alt">
WebGrid Layout Sort Paginazione
WebImage varimagePath = Server.MapPath("~/images/dotdotnet.png"); varimage = newWebImage(imagePath); FlipVertical(); FlipHorizontal(); RotateLeft(); RotateRight(); Crop WaterMark Resize Formato immagine: JPEG, PNG (default), BMP, GIF
Miglioramenti ai controller Global ActionFilters Nuova ViewBagproperty Nuovi ActionResult
Global ActionFilters MVC 2: ActionFilters Codice da eseguire prima e dopo una SPECIFICA action Si applica sull’action o sul controller
Global ActionFilters MVC 3: Global ActionFilters Filtri da eseguire prima e dopo OGNI action di tutti i controller GlobalFilters
ViewBag MVC 2: ViewData Dictionary MVC 3: ViewBag DynamicProperty ViewData[“Message”] VS. ViewBag.Message
Nuovi ActionResult HttpNotFoundResult RedirectResult HttpStatusCodeResult Demo
Javascript e AJAX AJAX sfrutta NuGet (aggiornabile) UnobtrusiveJavaScript Default Client-Side Validation Remote validator Supporto al binding JSON
UnobtrusiveJavaScript Vantaggi Separazione tra codice e markup Performance e scalabilità Aggiornamento delle librerie per supportare nuove funzionalità/nuovi e vecchi useragent Svantaggi Sviluppo più lento Necessità di cercare eventuali JS associati ai tag
Separazione tra codice e markup <input type="text" name="date" onchange="validateDate()" /> <input type="text" name="date" id="date" /> $(function(){ $('#date').bind('change', validateDate); });
UnobtrusiveJavaScript – ON/OFF Web.Config – appSettings     <add key="UnobtrusiveJavaScriptEnabled" value="true"/> HtmlHelper.UnobtrusiveJavaScriptEnabled Default: ON (sui nuovi progetti) OFF: compatibilità con MVC 1 e 2 Utilizza attributi compatibili con HTML 5
Unobtrusive JS: Performance OFF <form     action="/ajax/callback"     id="form0"     method="post"     onclick="Sys.Mvc.AsyncForm.handleClick(this, newSys.UI.DomEvent(event));"     onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, newSys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loading', updateTargetId: 'updateme' });"> ON <form     action="/ajax/callback"     data-ajax="true"     data-ajax-loading="#loading"     data-ajax-mode="replace"     data-ajax-update="#updateme"     method="post">
Default Client-Side Validation MVC 2 Html.EnableClientValidation MVC 3 Default! Disabilitabile da web.config
Remote Validator RemoteAttribute JQueryValidation Demo
JSON Binding Il modelbinding è stato esteso per supportare JSON E’ possibile fare binding da un oggetto JSON ad un parametro di una action
JSON Binding
JSON Binding
ModelValidation DataAnnotations ValidationAttribute ValidationInterfaces
DataAnnotations Supporto diretto ai DataAnnotations DisplayAttribute
ValidationAttribute IsValidOverload Accesso all’oggetto in corso di validazione CompareAttribute
ValidationInterfaces IValidatableObject  Validazione a livello di model Stato del model Confronto tra proprietà del model
ValidationInterfaces
DependencyInjection Cos’è Le dipendenze non sono all’interno del componente Le dipendenze vengono iniettate
Nessuna injection public classOrderManager     {         public voidProcessOrder()         { varlogger = newLogManager(); logger.Log();         }     }
DI: constructorinjection public classOrderManagerDI     {         private readonlyILog_logger;         public OrderManagerDI(ILoglogger)         { _logger = logger;         }         public voidProcessOrder()         { _logger.Log();         }     }
DI in pratica = IOC Le dipendenze possono essere moltissime ed in cascata La risoluzione delle dipendenze viene demandata ad un gestore esterno L’IOC si occupa di gestire le dipendenze a runtime Esempio: Ninject
DependencyInjection Controllers Views ActionFilters ModelBinders Modelvalidation Modelmetadata Valueproviders
Altre nuove features Partial-page output caching Estendibilità della finestra “New Project” OverloadsHtml.LabelFor e Html.LabelForModel Supporto alla sessione nei controller AdditionalMetadataAttribute Nuovo AccountController Nuovo template di progetto “Intranet”
ASP.NET è morto? NO!
ASP.NET è morto? Intranet/web application “non pubbliche” Molto veloce sviluppare Infinità di controlli server sul mercato ASP.NET 4.0 sopperisce a molti limiti sul controllo dell’HTML
Riferimenti MVC Page su ASP.NET www.asp.net/mvc MSDN go.microsoft.com/fwlink/?LinkId=205717 ScottGu http://weblogs.asp.net/scottgu/
Riferimenti NuGet http://nuget.codeplex.com/ http://haacked.com/tags/NuGet/default.aspx http://blog.be-st.it/?tag=/nuget
That’s allfolks Grazie

Contenu connexe

Tendances

Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Manuel Scapolan
 
AngularJS: accessibility
AngularJS: accessibilityAngularJS: accessibility
AngularJS: accessibilityVittorio Conte
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebMassimiliano Dessì
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebMassimiliano Dessì
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular OverviewFrancesco Sciuti
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSGiovanni Buffa
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012Andrea Dottor
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angulardotnetcode
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Spring Stack Testing:Continuous integration,Continuous Agitation
Spring Stack Testing:Continuous integration,Continuous AgitationSpring Stack Testing:Continuous integration,Continuous Agitation
Spring Stack Testing:Continuous integration,Continuous AgitationMassimiliano Dessì
 

Tendances (20)

Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3Tutte le novità di ASP.NET MVC3
Tutte le novità di ASP.NET MVC3
 
Yagwto
YagwtoYagwto
Yagwto
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
AngularJS: accessibility
AngularJS: accessibilityAngularJS: accessibility
AngularJS: accessibility
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis WebSpring, IBatis e Transazioni Aop Nel Jug Avis Web
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
 
AngularJS-Intro
AngularJS-IntroAngularJS-Intro
AngularJS-Intro
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis WebSpring E Spring Web Flow Nel Progetto Jug Avis Web
Spring E Spring Web Flow Nel Progetto Jug Avis Web
 
Knockout.js
Knockout.jsKnockout.js
Knockout.js
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)SPRING - MAVEN - REST API (ITA - Luglio 2017)
SPRING - MAVEN - REST API (ITA - Luglio 2017)
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
Acadevmy - Angular Overview
Acadevmy - Angular OverviewAcadevmy - Angular Overview
Acadevmy - Angular Overview
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJSWorkshop Ideare e creare Web Applications, Introduzione ad AngularJS
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012What's New in ASP.NET 4.5 and Visual Studio 2012
What's New in ASP.NET 4.5 and Visual Studio 2012
 
Angularjs
AngularjsAngularjs
Angularjs
 
Meetup ASP.NET Core Angular
Meetup ASP.NET Core AngularMeetup ASP.NET Core Angular
Meetup ASP.NET Core Angular
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Spring Stack Testing:Continuous integration,Continuous Agitation
Spring Stack Testing:Continuous integration,Continuous AgitationSpring Stack Testing:Continuous integration,Continuous Agitation
Spring Stack Testing:Continuous integration,Continuous Agitation
 

En vedette

AVANTEL EQUIPOS
AVANTEL EQUIPOSAVANTEL EQUIPOS
AVANTEL EQUIPOSAVANTEL
 
Prova alceu 2014 7ºb 1ºbim
Prova alceu 2014 7ºb 1ºbimProva alceu 2014 7ºb 1ºbim
Prova alceu 2014 7ºb 1ºbimÍris Ferreira
 
Riscos Globais em Charges de Chappatte
Riscos Globais em Charges de ChappatteRiscos Globais em Charges de Chappatte
Riscos Globais em Charges de ChappatteProfessor Belinaso
 
Branded Content & Transmedia Storytelling
Branded Content & Transmedia StorytellingBranded Content & Transmedia Storytelling
Branded Content & Transmedia Storytellingduradez
 
Cuestionario de Computacion
Cuestionario de ComputacionCuestionario de Computacion
Cuestionario de Computacionjulissa bailon
 
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...Thamiris Pinzon
 
Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
 Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr... Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...Carlos Terrones Lizana
 
Dabgo presentation
Dabgo presentationDabgo presentation
Dabgo presentationlovendahl
 
Experiencias en el Atlas de la diversidad cultural
Experiencias en el Atlas de la diversidad culturalExperiencias en el Atlas de la diversidad cultural
Experiencias en el Atlas de la diversidad culturalhuracanatlas
 
Campaña de prensa - Iglesia de Singapur
Campaña de prensa -  Iglesia de SingapurCampaña de prensa -  Iglesia de Singapur
Campaña de prensa - Iglesia de SingapurCarlos Terrones Lizana
 

En vedette (20)

AVANTEL EQUIPOS
AVANTEL EQUIPOSAVANTEL EQUIPOS
AVANTEL EQUIPOS
 
Apresentação palestra XIII ECCOR - Fortaleza ago-2014
Apresentação palestra XIII ECCOR - Fortaleza ago-2014Apresentação palestra XIII ECCOR - Fortaleza ago-2014
Apresentação palestra XIII ECCOR - Fortaleza ago-2014
 
Prova alceu 2014 7ºb 1ºbim
Prova alceu 2014 7ºb 1ºbimProva alceu 2014 7ºb 1ºbim
Prova alceu 2014 7ºb 1ºbim
 
Riscos Globais em Charges de Chappatte
Riscos Globais em Charges de ChappatteRiscos Globais em Charges de Chappatte
Riscos Globais em Charges de Chappatte
 
Frutos
FrutosFrutos
Frutos
 
Trabajo
TrabajoTrabajo
Trabajo
 
Branded Content & Transmedia Storytelling
Branded Content & Transmedia StorytellingBranded Content & Transmedia Storytelling
Branded Content & Transmedia Storytelling
 
Ktvonbangdtnganhan
KtvonbangdtnganhanKtvonbangdtnganhan
Ktvonbangdtnganhan
 
Cuestionario de Computacion
Cuestionario de ComputacionCuestionario de Computacion
Cuestionario de Computacion
 
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
 
Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
 Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr... Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
 
China 7ºanos
China   7ºanosChina   7ºanos
China 7ºanos
 
Dabgo presentation
Dabgo presentationDabgo presentation
Dabgo presentation
 
Experiencias en el Atlas de la diversidad cultural
Experiencias en el Atlas de la diversidad culturalExperiencias en el Atlas de la diversidad cultural
Experiencias en el Atlas de la diversidad cultural
 
Elegans megoldasok
Elegans megoldasokElegans megoldasok
Elegans megoldasok
 
Livro - Marca Pessoal
Livro - Marca PessoalLivro - Marca Pessoal
Livro - Marca Pessoal
 
Campaña de prensa - Iglesia de Singapur
Campaña de prensa -  Iglesia de SingapurCampaña de prensa -  Iglesia de Singapur
Campaña de prensa - Iglesia de Singapur
 
Palestra para o CETEM- SC - Florianópolis julho 2013
Palestra para o CETEM- SC - Florianópolis julho 2013Palestra para o CETEM- SC - Florianópolis julho 2013
Palestra para o CETEM- SC - Florianópolis julho 2013
 
Prospettiva1
Prospettiva1Prospettiva1
Prospettiva1
 
2011.09.05_新聞簡報
2011.09.05_新聞簡報2011.09.05_新聞簡報
2011.09.05_新聞簡報
 

Similaire à Asp.Net MVC 3 - Il Model View Controller secondo Microsoft

ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?Giorgio Di Nardo
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAndrea Balducci
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC FrameworkDotNetMarche
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0firenze-gtug
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoJava User Group Roma
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5JBug Italy
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVMRiccardo Cardin
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroAndrea Dottor
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockoutDotNetCampus
 
Servizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularServizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularValerio Como
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012Crismer La Pignola
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersAndrea Dottor
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Luca Lusso
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciutaAndrea Dottor
 

Similaire à Asp.Net MVC 3 - Il Model View Controller secondo Microsoft (20)

MVC2: non solo tecnologia
MVC2: non solo tecnologiaMVC2: non solo tecnologia
MVC2: non solo tecnologia
 
ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?ASP.NET MVC 3: se non ora, quando?
ASP.NET MVC 3: se non ora, quando?
 
ASP.NET MVC: Full Throttle
ASP.NET MVC: Full ThrottleASP.NET MVC: Full Throttle
ASP.NET MVC: Full Throttle
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community TourAsp.Net MVC 2 :: VS 2010 Community Tour
Asp.Net MVC 2 :: VS 2010 Community Tour
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0Luca Masini: Introduzione a GWT 2.0
Luca Masini: Introduzione a GWT 2.0
 
Seam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano CiccazzoSeam unifies Java EE by Massimiliano Ciccazzo
Seam unifies Java EE by Massimiliano Ciccazzo
 
April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5April 2010 - Seam unifies JEE5
April 2010 - Seam unifies JEE5
 
Design pattern architetturali Model View Controller, MVP e MVVM
Design pattern architetturali   Model View Controller, MVP e MVVMDesign pattern architetturali   Model View Controller, MVP e MVVM
Design pattern architetturali Model View Controller, MVP e MVVM
 
ASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuroASP.NET MVC 6 - uno sguardo al futuro
ASP.NET MVC 6 - uno sguardo al futuro
 
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
 
Servizi e Dependency Injection in Angular
Servizi e Dependency Injection in AngularServizi e Dependency Injection in Angular
Servizi e Dependency Injection in Angular
 
Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
 
Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Le novita di visual studio 2012
Le novita di visual studio 2012Le novita di visual studio 2012
Le novita di visual studio 2012
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8Come portare il profiler di symfony2 in drupal8
Come portare il profiler di symfony2 in drupal8
 
Django
DjangoDjango
Django
 
Dependency injection questa sconosciuta
Dependency injection questa sconosciutaDependency injection questa sconosciuta
Dependency injection questa sconosciuta
 

Asp.Net MVC 3 - Il Model View Controller secondo Microsoft

  • 1. ASP.NET MVC 3 Benedetti Stefano
  • 2. Contatti Ing. Stefano Benedetti http://www.be-st.it http://blog.be-st.it info@be-st.it Lo User Group dell'Emilia-Romagnainteramente dedicato alle tecnologie Microsoft .NET http://dotdotnet.org/
  • 3. Agenda MVC Overview scaffolding supporto HTML 5 viewengineRazor miglioramenti sui controller nuove funzionalità Javascript e AJAX integrazione con NuGet miglior supporto alla DependencyInjection altre features
  • 4. MVC Overview Pattern di presentazione
  • 5. MVC Overview Originariamente impiegato dal linguaggio Smalltalk Smalltalk è stato sviluppato allo Xerox PARC durante gli anni settanta
  • 6. Vantaggi SeparationofConcerns (SoC) UnitTesting DI Nessun viewstate Controllo completo dell’HTML Scomparsi i controlli server e gli ID autogenerati No PageLifeCycle Performance Semplicità
  • 8. MVC Routing Disaccoppiamento tra URL e pagina fisica /products /products/detail/1 /products/edit/1 /products/delete/1 Get Post Configurabile tramite Global.asax Convention overconfiguration ProductsController
  • 9. Global.asx e MapRoute public staticvoidRegisterRoutes(RouteCollectionroutes) { routes.MapRoute( "Default", // Routename "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameterdefaults ); }
  • 10. MVC Routing www.sito/product public classProductController : Controller { public ViewResultIndex() {varproducts = db.Products.Include(p => p.Brand); returnView(products.ToList()); } } Default Action (Index)
  • 11. MVC Routing products/details/1 public classProductController : Controller { public ViewResultDetails(intid) { Productproduct = db.Products.Find(id); returnView(product); } }
  • 12. MVC Routing GET: /Product/Edit/5 public ActionResultEdit(intid) { Productproduct = db.Products.Find(id); ViewBag.BrandId = new SelectList(db.Brands, "Id", "Name", product.BrandId); returnView(product); }
  • 13. MVC Routing e ModelBinding POST: /Product/Edit/5 [HttpPost] public ActionResultEdit(Productproduct) { if (ModelState.IsValid) { db.Entry(product).State = EntityState.Modified; db.SaveChanges(); returnRedirectToAction("Index"); } ViewBag.BrandId = new SelectList(db.Brands, "Id", "Name", product.BrandId); returnView(product); }
  • 14. Requisiti Per il runtimeASP.NET MVC 3: .NET Framework version4 ASP.NETMVC 3 Visual Studio 2010 tools: VisualStudio 2010 o Visual Web Developer 2010 Express
  • 15. Installazione Side by side con MVC 2 Web PlatformInstaller (WebPI) http://www.microsoft.com/web/gallery/install.aspx?appid=MVC3 Download diretto http://go.microsoft.com/fwlink/?LinkID=208140
  • 16. NuGet Library Package Manager Estensione di Visual Studio Automazione: Download Package folder Reference Web.config Configurazione custom Gestione update Post e guida di base su blog.be-st.it
  • 18. NuGet in MVC 3 Versione 1.2 Package pre-installati Modernizr Entity Framework Code First JQuery
  • 19. Scaffolding Creazione dell’impalcatura “Add Controller” ha 3 modalità di scaffolding: Empty controller Controller withemptyread/writeactions Controller withread/writeactions and view, usingEntity Framework
  • 20.
  • 21. Scaffolding Alternativa: MVCScaffolding Package NuGet http://blog.stevensanderson.com Pro ASP.NET MVC V2 Framework
  • 22. HTML 5 I template di progetto supportano HTML 5
  • 23. HTML 5 Nuovi tag Header Footer Nav Section Validazione HTML 5 in VS 2010
  • 24.
  • 25.
  • 26. ViewEngine “Razor” Concisa Facile da imparare Intellisense e evidenziazione del codice Razor in Visual Studio
  • 27. ViewEngine “Razor” Definizione del model: @model Commenti: @* *@ Impostazioni di default (ad es. layoutpage) Html senza encoding: Html.Raw Codice condiviso tra le view (_viewstart.cshtml) “Master page”: layout
  • 29. ViewEngineSupport Default Web Forms (ASPX) Razor Spark NHaml NDJango
  • 30. Nuovi HTML Helpers Chart WebGrid Crypto WebImage WebMail
  • 31. Chart DemoHtmlHelpersController public ActionResult Chart() { var key = new Chart(width: 600, height: 400) .AddSeries( chartType: "bar", legend: "Rainfall", xValue: new[] { "Jan", "Feb", "Mar", "Apr", "May" }, yValues: new[] { "20", "20", "40", "10", "10" }) .Write(); returnnull; }
  • 32. Chart View <p> <imgsrc="/DemoHtmlHelpers/Chart" alt="Chart" /> </p>
  • 33. WebGrid @{ vargrid = newWebGrid(source: Model, rowsPerPage: 3); } @grid.GetHtml(tableStyle: "grid", headerStyle: "head", alternatingRowStyle: "alt", columns: grid.Columns( grid.Column("Id"), grid.Column("Name") ) ) <tableclass="grid"> <thead><trclass="head"> <trclass="alt">
  • 34. WebGrid Layout Sort Paginazione
  • 35. WebImage varimagePath = Server.MapPath("~/images/dotdotnet.png"); varimage = newWebImage(imagePath); FlipVertical(); FlipHorizontal(); RotateLeft(); RotateRight(); Crop WaterMark Resize Formato immagine: JPEG, PNG (default), BMP, GIF
  • 36. Miglioramenti ai controller Global ActionFilters Nuova ViewBagproperty Nuovi ActionResult
  • 37. Global ActionFilters MVC 2: ActionFilters Codice da eseguire prima e dopo una SPECIFICA action Si applica sull’action o sul controller
  • 38. Global ActionFilters MVC 3: Global ActionFilters Filtri da eseguire prima e dopo OGNI action di tutti i controller GlobalFilters
  • 39. ViewBag MVC 2: ViewData Dictionary MVC 3: ViewBag DynamicProperty ViewData[“Message”] VS. ViewBag.Message
  • 40. Nuovi ActionResult HttpNotFoundResult RedirectResult HttpStatusCodeResult Demo
  • 41. Javascript e AJAX AJAX sfrutta NuGet (aggiornabile) UnobtrusiveJavaScript Default Client-Side Validation Remote validator Supporto al binding JSON
  • 42. UnobtrusiveJavaScript Vantaggi Separazione tra codice e markup Performance e scalabilità Aggiornamento delle librerie per supportare nuove funzionalità/nuovi e vecchi useragent Svantaggi Sviluppo più lento Necessità di cercare eventuali JS associati ai tag
  • 43. Separazione tra codice e markup <input type="text" name="date" onchange="validateDate()" /> <input type="text" name="date" id="date" /> $(function(){ $('#date').bind('change', validateDate); });
  • 44. UnobtrusiveJavaScript – ON/OFF Web.Config – appSettings     <add key="UnobtrusiveJavaScriptEnabled" value="true"/> HtmlHelper.UnobtrusiveJavaScriptEnabled Default: ON (sui nuovi progetti) OFF: compatibilità con MVC 1 e 2 Utilizza attributi compatibili con HTML 5
  • 45. Unobtrusive JS: Performance OFF <form     action="/ajax/callback"     id="form0"     method="post"     onclick="Sys.Mvc.AsyncForm.handleClick(this, newSys.UI.DomEvent(event));"     onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, newSys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, loadingElementId: 'loading', updateTargetId: 'updateme' });"> ON <form     action="/ajax/callback"     data-ajax="true"     data-ajax-loading="#loading"     data-ajax-mode="replace"     data-ajax-update="#updateme"     method="post">
  • 46. Default Client-Side Validation MVC 2 Html.EnableClientValidation MVC 3 Default! Disabilitabile da web.config
  • 47. Remote Validator RemoteAttribute JQueryValidation Demo
  • 48. JSON Binding Il modelbinding è stato esteso per supportare JSON E’ possibile fare binding da un oggetto JSON ad un parametro di una action
  • 52. DataAnnotations Supporto diretto ai DataAnnotations DisplayAttribute
  • 53. ValidationAttribute IsValidOverload Accesso all’oggetto in corso di validazione CompareAttribute
  • 54. ValidationInterfaces IValidatableObject  Validazione a livello di model Stato del model Confronto tra proprietà del model
  • 56. DependencyInjection Cos’è Le dipendenze non sono all’interno del componente Le dipendenze vengono iniettate
  • 57. Nessuna injection public classOrderManager { public voidProcessOrder() { varlogger = newLogManager(); logger.Log(); } }
  • 58. DI: constructorinjection public classOrderManagerDI { private readonlyILog_logger; public OrderManagerDI(ILoglogger) { _logger = logger; } public voidProcessOrder() { _logger.Log(); } }
  • 59. DI in pratica = IOC Le dipendenze possono essere moltissime ed in cascata La risoluzione delle dipendenze viene demandata ad un gestore esterno L’IOC si occupa di gestire le dipendenze a runtime Esempio: Ninject
  • 60. DependencyInjection Controllers Views ActionFilters ModelBinders Modelvalidation Modelmetadata Valueproviders
  • 61. Altre nuove features Partial-page output caching Estendibilità della finestra “New Project” OverloadsHtml.LabelFor e Html.LabelForModel Supporto alla sessione nei controller AdditionalMetadataAttribute Nuovo AccountController Nuovo template di progetto “Intranet”
  • 63. ASP.NET è morto? Intranet/web application “non pubbliche” Molto veloce sviluppare Infinità di controlli server sul mercato ASP.NET 4.0 sopperisce a molti limiti sul controllo dell’HTML
  • 64. Riferimenti MVC Page su ASP.NET www.asp.net/mvc MSDN go.microsoft.com/fwlink/?LinkId=205717 ScottGu http://weblogs.asp.net/scottgu/
  • 65. Riferimenti NuGet http://nuget.codeplex.com/ http://haacked.com/tags/NuGet/default.aspx http://blog.be-st.it/?tag=/nuget