SlideShare a Scribd company logo
ASP.NET MVC 3Benedetti Stefano
ContattiIng. Stefano Benedettihttp://www.be-st.ithttp://blog.be-st.itinfo@be-st.it Lo User Group dell'Emilia-Romagnainteramente dedicato alle tecnologie Microsoft .NEThttp://dotdotnet.org/
AgendaMVC Overviewscaffoldingsupporto HTML 5viewengineRazormiglioramenti sui controllernuove funzionalità Javascript e AJAXintegrazione con NuGetmiglior supporto alla DependencyInjectionaltre features
MVC OverviewPattern di presentazione
MVC OverviewOriginariamente impiegato dal linguaggio SmalltalkSmalltalk è stato sviluppato allo Xerox PARC durante gli anni settanta
VantaggiSeparationofConcerns (SoC)UnitTestingDINessun viewstateControllo completo dell’HTMLScomparsi i controlli server e gli ID autogeneratiNo PageLifeCyclePerformanceSemplicità
ASP.NETPage life cycle
MVC RoutingDisaccoppiamento tra URL e pagina fisica/products/products/detail/1/products/edit/1/products/delete/1GetPostConfigurabile tramite Global.asaxConvention overconfigurationProductsController
Global.asx e MapRoute public staticvoidRegisterRoutes(RouteCollectionroutes) {routes.MapRoute(          "Default", // Routename          "{controller}/{action}/{id}", // URL with parametersnew { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameterdefaults            ); }
MVC Routingwww.sito/productpublic classProductController : Controller{public ViewResultIndex()     {varproducts = db.Products.Include(p => p.Brand);returnView(products.ToList());	}}Default Action (Index)
MVC Routingproducts/details/1public classProductController : Controller{ public ViewResultDetails(intid)        {Productproduct = db.Products.Find(id);returnView(product);        }}
MVC RoutingGET: /Product/Edit/5public ActionResultEdit(intid)        {Productproduct = db.Products.Find(id);ViewBag.BrandId = new SelectList(db.Brands, "Id", "Name", product.BrandId);returnView(product);        }
MVC Routing e ModelBindingPOST: /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);        }
RequisitiPer il runtimeASP.NET MVC 3:	.NET Framework version4ASP.NETMVC 3 Visual Studio 2010 tools:VisualStudio 2010 o Visual Web Developer 2010 Express
InstallazioneSide by side con MVC 2Web PlatformInstaller (WebPI)http://www.microsoft.com/web/gallery/install.aspx?appid=MVC3Download direttohttp://go.microsoft.com/fwlink/?LinkID=208140
NuGetLibrary Package ManagerEstensione di Visual StudioAutomazione:DownloadPackage folderReferenceWeb.configConfigurazione customGestione updatePost e guida di base su blog.be-st.it
NuGetDEMO
NuGet in MVC 3Versione 1.2Package pre-installatiModernizrEntity Framework Code FirstJQuery
ScaffoldingCreazione dell’impalcatura“Add Controller” ha 3 modalità di scaffolding:Empty controllerController withemptyread/writeactionsController withread/writeactions and view, usingEntity Framework
ScaffoldingController withread/writeactions and view, usingEntity FrameworkBeneficiAccesso ai datiValidazioneOne-to-manyrelationship
ScaffoldingAlternativa: MVCScaffoldingPackage NuGethttp://blog.stevensanderson.comPro ASP.NET MVC V2 Framework
HTML 5I template di progetto supportano HTML 5
HTML 5Nuovi tagHeaderFooterNavSectionValidazione HTML 5 in VS 2010
HTML 5La compatibilità  con i browser più vecchi è garantita da ModernizrBrowser non HTML 5<header><nav><section><footer>http://www.modernizr.com/
Package NuGetViewEngine “Razor”OverviewNuove featureNuovi HTML helpers
ViewEngine “Razor”ConcisaFacile da imparareIntellisense e evidenziazione del codice Razor in Visual Studio
ViewEngine “Razor”Definizione del model: @modelCommenti: @* *@Impostazioni di default (ad es. layoutpage)Html senza encoding: Html.RawCodice condiviso tra le view (_viewstart.cshtml)“Master page”: layout
Razor Layout
ViewEngineSupportDefaultWeb Forms (ASPX)RazorSparkNHamlNDJango
Nuovi HTML HelpersChartWebGridCryptoWebImageWebMail
ChartDemoHtmlHelpersController 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;        }
ChartView<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">
WebGridLayoutSortPaginazione
WebImagevarimagePath = Server.MapPath("~/images/dotdotnet.png");varimage = newWebImage(imagePath);FlipVertical(); FlipHorizontal();RotateLeft(); RotateRight();CropWaterMarkResizeFormato immagine: JPEG, PNG (default), BMP, GIF
Miglioramenti ai controllerGlobal ActionFiltersNuova ViewBagpropertyNuovi ActionResult
Global ActionFiltersMVC 2: ActionFiltersCodice da eseguire prima e dopo una SPECIFICA actionSi applica sull’action o sul controller
Global ActionFiltersMVC 3: Global ActionFiltersFiltri da eseguire prima e dopo OGNI action di tutti i controllerGlobalFilters
ViewBagMVC 2: ViewDataDictionaryMVC 3: ViewBagDynamicPropertyViewData[“Message”] VS. ViewBag.Message
Nuovi ActionResultHttpNotFoundResultRedirectResultHttpStatusCodeResultDemo
Javascript e AJAXAJAX sfrutta NuGet (aggiornabile)UnobtrusiveJavaScriptDefault Client-Side ValidationRemote validatorSupporto al binding JSON
UnobtrusiveJavaScriptVantaggiSeparazione tra codice e markupPerformance e scalabilitàAggiornamento delle librerie per supportare nuove funzionalità/nuovi e vecchi useragentSvantaggiSviluppo più lentoNecessità 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/OFFWeb.Config – appSettings    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>HtmlHelper.UnobtrusiveJavaScriptEnabledDefault: ON (sui nuovi progetti)OFF: compatibilità con MVC 1 e 2Utilizza attributi compatibili con HTML 5
Unobtrusive JS: PerformanceOFF<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 ValidationMVC 2Html.EnableClientValidationMVC 3Default!Disabilitabile da web.config
Remote ValidatorRemoteAttributeJQueryValidationDemo
JSON BindingIl modelbinding è stato esteso per supportare JSONE’ possibile fare binding da un oggetto JSON ad un parametro di una action
JSON Binding
JSON Binding
ModelValidationDataAnnotationsValidationAttributeValidationInterfaces
DataAnnotationsSupporto diretto ai DataAnnotationsDisplayAttribute
ValidationAttributeIsValidOverloadAccesso all’oggetto in corso di validazioneCompareAttribute
ValidationInterfacesIValidatableObject Validazione a livello di modelStato del modelConfronto tra proprietà del model
ValidationInterfaces
DependencyInjectionCos’èLe dipendenze non sono all’interno del componenteLe dipendenze vengono iniettate
Nessuna injectionpublic classOrderManager    {        public voidProcessOrder()        {varlogger = newLogManager();logger.Log();        }    }
DI: constructorinjectionpublic classOrderManagerDI    {        private readonlyILog_logger;        public OrderManagerDI(ILoglogger)        {_logger = logger;        }        public voidProcessOrder()        {_logger.Log();        }    }
DI in pratica = IOCLe dipendenze possono essere moltissime ed in cascataLa risoluzione delle dipendenze viene demandata ad un gestore esternoL’IOC si occupa di gestire le dipendenze a runtimeEsempio:Ninject
DependencyInjectionControllersViewsActionFiltersModelBindersModelvalidationModelmetadataValueproviders
Altre nuove featuresPartial-page output cachingEstendibilità della finestra “New Project”OverloadsHtml.LabelFor e Html.LabelForModelSupporto alla sessione nei controllerAdditionalMetadataAttributeNuovo AccountControllerNuovo template di progetto “Intranet”
ASP.NET è morto?NO!
ASP.NET è morto?Intranet/web application “non pubbliche”Molto veloce sviluppareInfinità di controlli server sul mercatoASP.NET 4.0 sopperisce a molti limiti sul controllo dell’HTML
RiferimentiMVC Page su ASP.NETwww.asp.net/mvcMSDNgo.microsoft.com/fwlink/?LinkId=205717ScottGuhttp://weblogs.asp.net/scottgu/
RiferimentiNuGethttp://nuget.codeplex.com/http://haacked.com/tags/NuGet/default.aspxhttp://blog.be-st.it/?tag=/nuget
That’s allfolksGrazie

More Related Content

What's hot (20)

PDF
Tutte le novità di ASP.NET MVC3
Manuel Scapolan
 
ODP
Yagwto
maraexception
 
ODP
Corso angular js componenti
Beniamino Ferrari
 
PPTX
AngularJS: accessibility
Vittorio Conte
 
PDF
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Massimiliano Dessì
 
PDF
AngularJS-Intro
Vittorio Conte
 
PDF
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Massimiliano Dessì
 
PDF
Knockout.js
Manuel Scapolan
 
PDF
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
 
PPTX
Integrazione continua con TFS Build
Gian Maria Ricci
 
PDF
Acadevmy - Angular Overview
Francesco Sciuti
 
PDF
Spring Intro
guestfb22d3
 
PDF
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
PDF
Blazor: are we ready for the launch?
Andrea Agnoletto
 
PPT
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
PDF
Angularjs
Francesco Portus
 
PPTX
Meetup ASP.NET Core Angular
dotnetcode
 
PDF
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
ODP
Spring Framework
NaLUG
 
PDF
Spring Stack Testing:Continuous integration,Continuous Agitation
Massimiliano Dessì
 
Tutte le novità di ASP.NET MVC3
Manuel Scapolan
 
Corso angular js componenti
Beniamino Ferrari
 
AngularJS: accessibility
Vittorio Conte
 
Spring, IBatis e Transazioni Aop Nel Jug Avis Web
Massimiliano Dessì
 
AngularJS-Intro
Vittorio Conte
 
Spring E Spring Web Flow Nel Progetto Jug Avis Web
Massimiliano Dessì
 
Knockout.js
Manuel Scapolan
 
SPRING - MAVEN - REST API (ITA - Luglio 2017)
Valerio Radice
 
Integrazione continua con TFS Build
Gian Maria Ricci
 
Acadevmy - Angular Overview
Francesco Sciuti
 
Spring Intro
guestfb22d3
 
Workshop Ideare e creare Web Applications, Introduzione ad AngularJS
Giovanni Buffa
 
Blazor: are we ready for the launch?
Andrea Agnoletto
 
What's New in ASP.NET 4.5 and Visual Studio 2012
Andrea Dottor
 
Angularjs
Francesco Portus
 
Meetup ASP.NET Core Angular
dotnetcode
 
ASP.NET Core - dove siamo arrivati
Andrea Dottor
 
Spring Framework
NaLUG
 
Spring Stack Testing:Continuous integration,Continuous Agitation
Massimiliano Dessì
 

Viewers also liked (20)

PDF
AVANTEL EQUIPOS
AVANTEL
 
PDF
Apresentação palestra XIII ECCOR - Fortaleza ago-2014
Tribunal de Contas do Estado de Minas Gerais
 
DOCX
Prova alceu 2014 7ºb 1ºbim
Íris Ferreira
 
PDF
Riscos Globais em Charges de Chappatte
Professor Belinaso
 
PPT
Frutos
dandaravieira
 
PPTX
Trabajo
gomelitonix
 
PPT
Branded Content & Transmedia Storytelling
duradez
 
PPT
Ktvonbangdtnganhan
TRAN009102128
 
PPT
Cuestionario de Computacion
julissa bailon
 
PDF
APRESENTAÇÃO - Estudo Comparativo entre Companhias aéreas brasileiras no Face...
Thamiris Pinzon
 
PDF
Tu empresa en la Web 2.0 - Aumenta tus beneficios en Facebook, Twitter y otr...
Carlos Terrones Lizana
 
PPTX
China 7ºanos
Íris Ferreira
 
PPTX
Dabgo presentation
lovendahl
 
PPTX
Experiencias en el Atlas de la diversidad cultural
huracanatlas
 
PDF
Elegans megoldasok
Velencei Jolán
 
PPTX
Livro - Marca Pessoal
Anderson Hernandes
 
PDF
Campaña de prensa - Iglesia de Singapur
Carlos Terrones Lizana
 
PDF
Palestra para o CETEM- SC - Florianópolis julho 2013
Tribunal de Contas do Estado de Minas Gerais
 
PPT
Prospettiva1
annalisalu
 
PPS
2011.09.05_新聞簡報
ERA Taiwan Master Franchise ,Inc.
 
AVANTEL EQUIPOS
AVANTEL
 
Apresentação palestra XIII ECCOR - Fortaleza ago-2014
Tribunal de Contas do Estado de Minas Gerais
 
Prova alceu 2014 7ºb 1ºbim
Íris Ferreira
 
Riscos Globais em Charges de Chappatte
Professor Belinaso
 
Trabajo
gomelitonix
 
Branded Content & Transmedia Storytelling
duradez
 
Ktvonbangdtnganhan
TRAN009102128
 
Cuestionario de Computacion
julissa bailon
 
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...
Carlos Terrones Lizana
 
China 7ºanos
Íris Ferreira
 
Dabgo presentation
lovendahl
 
Experiencias en el Atlas de la diversidad cultural
huracanatlas
 
Elegans megoldasok
Velencei Jolán
 
Livro - Marca Pessoal
Anderson Hernandes
 
Campaña de prensa - Iglesia de Singapur
Carlos Terrones Lizana
 
Palestra para o CETEM- SC - Florianópolis julho 2013
Tribunal de Contas do Estado de Minas Gerais
 
Prospettiva1
annalisalu
 
2011.09.05_新聞簡報
ERA Taiwan Master Franchise ,Inc.
 
Ad

Similar to Asp.Net MVC 3 - Il Model View Controller secondo Microsoft (20)

PPTX
ASP.NET MVC 3: se non ora, quando?
Giorgio Di Nardo
 
PPTX
Asp.Net MVC 2 :: VS 2010 Community Tour
Andrea Balducci
 
PPTX
Asp.NET MVC Framework
DotNetMarche
 
PPTX
MVC2: non solo tecnologia
Andrea Saltarello
 
PPTX
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 
PPSX
Powerful asp.net 4 e ie9
Stefano Benedetti
 
PDF
ASP.NET MVC: Full Throttle
Andrea Saltarello
 
PDF
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
Marco Parenzan
 
PPTX
Web Api – The HTTP Way
Luca Milan
 
PDF
The simplest thing that could possibly work
Emanuele DelBono
 
PPTX
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
PPTX
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Marco Parenzan
 
PPTX
We Want Web - Web Applications con MVC 3
DomusDotNet
 
PDF
ASP.NET MVC 3 - Trasportare i dati nel Model
Manuel Scapolan
 
PDF
ASP.NET MVC Intro
Manuel Scapolan
 
PPTX
Inversion of Control @ CD2008
Mauro Servienti
 
PDF
Layered Expression Trees feat. CQRS
Andrea Saltarello
 
PPT
Imparare asp.net 107
Pi Libri
 
PPTX
What's new in ASP.NET 4.0
XeDotNet
 
PPS
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
 
ASP.NET MVC 3: se non ora, quando?
Giorgio Di Nardo
 
Asp.Net MVC 2 :: VS 2010 Community Tour
Andrea Balducci
 
Asp.NET MVC Framework
DotNetMarche
 
MVC2: non solo tecnologia
Andrea Saltarello
 
ASP.NET MVC 6 - uno sguardo al futuro
Andrea Dottor
 
Powerful asp.net 4 e ie9
Stefano Benedetti
 
ASP.NET MVC: Full Throttle
Andrea Saltarello
 
Model View Controller - Semplificare Il Codice E Minimizzare I Tempi
Marco Parenzan
 
Web Api – The HTTP Way
Luca Milan
 
The simplest thing that could possibly work
Emanuele DelBono
 
Il buon programmatore - consigli pratici per una vita felice
Andrea Dottor
 
Lo sai che si può fare DDD in Javascript grazie a Typescript? Visual Studio e...
Marco Parenzan
 
We Want Web - Web Applications con MVC 3
DomusDotNet
 
ASP.NET MVC 3 - Trasportare i dati nel Model
Manuel Scapolan
 
ASP.NET MVC Intro
Manuel Scapolan
 
Inversion of Control @ CD2008
Mauro Servienti
 
Layered Expression Trees feat. CQRS
Andrea Saltarello
 
Imparare asp.net 107
Pi Libri
 
What's new in ASP.NET 4.0
XeDotNet
 
Sviluppo Web Agile Con MonoRail
Stefano Ottaviani
 
Ad

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