ݺߣ

ݺߣShare a Scribd company logo
Microsoft ASP.NET MVC 2Andrea Dottor – Microsoft MVP ASP/ASP.NET
09/04/2010www.xedotnet.org2MVC o Web Form?Cos’è il pattern MVC?In dettaglioModelView ControllerCome si usa ASP.NET MVC?Cosa devo conoscere per usare MVC?Perchè/quando usare ASP.NET MVC?
09/04/2010www.xedotnet.org3MVC non sostituisce le WebFormMVC si pone come alternativa ad WebFormSi poteva, e si può, controllare il codice HTML prodotto anche con ASP.NET WebFormCSS Friendly AdapterAdaptive RenderingASP.NET 4.0 ...Si dovrà capire dov’è il vantaggio ad utilizzare MVC e dove WebFormMVC non sostituisce le WebForm
ASP.NET MVCASP.NET MVC vsWebFormASP.NETWebFormApplicazioni RADNon richiede particolari conoscenze del webViewState e PostBackModello Event-DrivenFacilitàcontrollo HTML e JavascriptPensato per scenari SEO e RESTFacilmentetestabileCoreASP.NETLinguaggi C#, VB.NET
MasterPage
Output Cache
Autenticazione e Autorizzazione
Globalizzazione
Routing09/04/2010www.xedotnet.org5Gli obiettivi di ASP.NET MVCRealizzare applicazioni che seguano il pattern Model-View-ControllerSeparazione dei compiti all’interno dell’applicazioneCompleto controllo del codice HTML prodottoConsente di avere URL SEO FriendlyAgevolare il Test Driven DevelopmentFacilità di integrazione con ASP.NET AJAX e jQueryGli obiettivi di MVC Framework
09/04/2010www.xedotnet.org6MVC – il patternNon è un pattern recente ma risale agli anni ‘70Originalmente utilizzato in Smalltalk per la realizzazione di interfacce grafichePermette di separare i compiti all’interno dell’applicazione tra Model, View e ControllerMVC – il pattern
09/04/2010www.xedotnet.org7MODELContiene l’object model dell’applicazioneContiene lo strato di accesso ai datiContiene le regole di validazioneMODEL (teoria)
09/04/2010www.xedotnet.org8ASP.NET MVC – MODELPuò anche essere composto utilizzando LINQ to SQL oppure Entity FrameworkPer convenzione il nome del file dovrebbe corrispondere a quello del rispettivo controller: <Nome del model>ModelContenuto nella cartella ~/Models/Tramite attributi nelle classi e proprietà vengono specificate le regole di validazione e di visualizzazioneStessi attributi utilizzati anche in ASP.NET Dynamic DataMODEL (nel microsoft mvc)
09/04/2010www.xedotnet.org9VIEWSi occupa di renderizzare le informazioniNon devono contenere logicaNon devono eseguire l’accesso ai datiI dati da visualizzare vengono forniti dal controllerVIEW (teoria)
09/04/2010www.xedotnet.org10ASP.NET MVC – VIEWParagonabile al HTML markup di una pagina ASP.NETPuò essere composto da:ViewPageViewMasterPageDevono essere create in~/View/<ControllerName>/~/View/Shared/VIEW (nel microsoft mvc)
09/04/2010www.xedotnet.org11ASP.NET MVC - PARTIAL VIEWViewUserControlSi possono vedere come gli UserControl di ASP.NETPossono avere acesso agli stessi dati della parent ViewHtml.RenderPartial("CommentInsert");Oppure accesso a parte dei dati del modelHtml.RenderPartial("DisplayNewsDescription", Model.Comments);I dati modificati nella partial View, non modificano i dati della parent ViewHanno solamente HTML markup (come per le View)PARTIAL VIEW (nel microsoft mvc)
09/04/2010www.xedotnet.org12CONTROLLERSi occupa dell’iterazione tra Model e ViewRiceve l’input dell’utente e lo elabora per fornire i dati corretti alla ViewCONTROLLER (teoria)
09/04/2010www.xedotnet.org13ASP.NET MVC – CONTROLLERContenuto nella cartella ~/Controllers/La classe deve ereditare dalla classe ControllerIl nome deve essere <Nome del controller>ControllerEsempiopublic class AccountController : ControllerDeve contenere almeno un metodo per ogni actionEsempio:public ActionResult LogOn()public ActionResult LogOn(LogOnModel model, string returnUrl)CONTROLLER (nel microsoft mvc)
MVC – il pattern09/04/2010www.xedotnet.org14Modelhttp://xedotnet.org/Products/http://xedotnet.org/Products/Edit/5ControllerViewProductsControllerProduct (Model)SQLProducts (View)/View/Products/Index.aspx/View/Products/Edit.aspx
09/04/2010www.xedotnet.org15Passaggio di dati controller -> viewAttraversoil dictionary Controller.ViewDataViewData["Message"] = "Welcome to ASP.NET MVC!";La paginaereditadaSystem.Web.Mvc.ViewPageUtilizzandoStrongly Typed ClassesNews news = newsRepository.GetNewsById(id);return View(news);La paginapuòereditaredaSystem.Web.Mvc.ViewPage<T> per facilitare la scrittura del codice nella ViewPassaggio di dati controller -> view
09/04/2010www.xedotnet.org16Passaggio di dati view -> controllerSubmit della form (HttpPost)Richiesta tramite AJAXPassaggio di dati view -> controller<% using (Html.BeginForm()) {%><fieldset>    <%= Html.TextBoxFor(model => model.Author)%>    <p>        <input type="submit" value="Create" />    </p></fieldset><% } %>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();
09/04/2010www.xedotnet.org17HTML HelperPermette di agevolare la creazione di controlli HTML per la visualizzazione/modifica dei dati del modelV 1.0Solo tramite stringheEsegnalazione errori solo a run-timeV 2.0Uso di lambda expressionSegnalazione errori a compile-timeHTML Helper
ValidazioneV 1.0 Server-side ValidationV 2.0Client-side ValidationData AnnotationModel Validation Provider  custom validation providerValidazione09/04/2010www.xedotnet.org18
09/04/2010www.xedotnet.org19AreasPermette di suddividere l’applicazione in sotto-applicazioni MVCMaggiore separazione dei compiti/ruoliMaggiore controllo del codice nell’applicazioneRoutingControllers, Models e ViewPermessiAreas

More Related Content

ASP.NET MVC 2.0

  • 1. Microsoft ASP.NET MVC 2Andrea Dottor – Microsoft MVP ASP/ASP.NET
  • 2. 09/04/2010www.xedotnet.org2MVC o Web Form?Cos’è il pattern MVC?In dettaglioModelView ControllerCome si usa ASP.NET MVC?Cosa devo conoscere per usare MVC?Perchè/quando usare ASP.NET MVC?
  • 3. 09/04/2010www.xedotnet.org3MVC non sostituisce le WebFormMVC si pone come alternativa ad WebFormSi poteva, e si può, controllare il codice HTML prodotto anche con ASP.NET WebFormCSS Friendly AdapterAdaptive RenderingASP.NET 4.0 ...Si dovrà capire dov’è il vantaggio ad utilizzare MVC e dove WebFormMVC non sostituisce le WebForm
  • 4. ASP.NET MVCASP.NET MVC vsWebFormASP.NETWebFormApplicazioni RADNon richiede particolari conoscenze del webViewState e PostBackModello Event-DrivenFacilitàcontrollo HTML e JavascriptPensato per scenari SEO e RESTFacilmentetestabileCoreASP.NETLinguaggi C#, VB.NET
  • 9. Routing09/04/2010www.xedotnet.org5Gli obiettivi di ASP.NET MVCRealizzare applicazioni che seguano il pattern Model-View-ControllerSeparazione dei compiti all’interno dell’applicazioneCompleto controllo del codice HTML prodottoConsente di avere URL SEO FriendlyAgevolare il Test Driven DevelopmentFacilità di integrazione con ASP.NET AJAX e jQueryGli obiettivi di MVC Framework
  • 10. 09/04/2010www.xedotnet.org6MVC – il patternNon è un pattern recente ma risale agli anni ‘70Originalmente utilizzato in Smalltalk per la realizzazione di interfacce grafichePermette di separare i compiti all’interno dell’applicazione tra Model, View e ControllerMVC – il pattern
  • 11. 09/04/2010www.xedotnet.org7MODELContiene l’object model dell’applicazioneContiene lo strato di accesso ai datiContiene le regole di validazioneMODEL (teoria)
  • 12. 09/04/2010www.xedotnet.org8ASP.NET MVC – MODELPuò anche essere composto utilizzando LINQ to SQL oppure Entity FrameworkPer convenzione il nome del file dovrebbe corrispondere a quello del rispettivo controller: <Nome del model>ModelContenuto nella cartella ~/Models/Tramite attributi nelle classi e proprietà vengono specificate le regole di validazione e di visualizzazioneStessi attributi utilizzati anche in ASP.NET Dynamic DataMODEL (nel microsoft mvc)
  • 13. 09/04/2010www.xedotnet.org9VIEWSi occupa di renderizzare le informazioniNon devono contenere logicaNon devono eseguire l’accesso ai datiI dati da visualizzare vengono forniti dal controllerVIEW (teoria)
  • 14. 09/04/2010www.xedotnet.org10ASP.NET MVC – VIEWParagonabile al HTML markup di una pagina ASP.NETPuò essere composto da:ViewPageViewMasterPageDevono essere create in~/View/<ControllerName>/~/View/Shared/VIEW (nel microsoft mvc)
  • 15. 09/04/2010www.xedotnet.org11ASP.NET MVC - PARTIAL VIEWViewUserControlSi possono vedere come gli UserControl di ASP.NETPossono avere acesso agli stessi dati della parent ViewHtml.RenderPartial("CommentInsert");Oppure accesso a parte dei dati del modelHtml.RenderPartial("DisplayNewsDescription", Model.Comments);I dati modificati nella partial View, non modificano i dati della parent ViewHanno solamente HTML markup (come per le View)PARTIAL VIEW (nel microsoft mvc)
  • 16. 09/04/2010www.xedotnet.org12CONTROLLERSi occupa dell’iterazione tra Model e ViewRiceve l’input dell’utente e lo elabora per fornire i dati corretti alla ViewCONTROLLER (teoria)
  • 17. 09/04/2010www.xedotnet.org13ASP.NET MVC – CONTROLLERContenuto nella cartella ~/Controllers/La classe deve ereditare dalla classe ControllerIl nome deve essere <Nome del controller>ControllerEsempiopublic class AccountController : ControllerDeve contenere almeno un metodo per ogni actionEsempio:public ActionResult LogOn()public ActionResult LogOn(LogOnModel model, string returnUrl)CONTROLLER (nel microsoft mvc)
  • 18. MVC – il pattern09/04/2010www.xedotnet.org14Modelhttp://xedotnet.org/Products/http://xedotnet.org/Products/Edit/5ControllerViewProductsControllerProduct (Model)SQLProducts (View)/View/Products/Index.aspx/View/Products/Edit.aspx
  • 19. 09/04/2010www.xedotnet.org15Passaggio di dati controller -> viewAttraversoil dictionary Controller.ViewDataViewData["Message"] = "Welcome to ASP.NET MVC!";La paginaereditadaSystem.Web.Mvc.ViewPageUtilizzandoStrongly Typed ClassesNews news = newsRepository.GetNewsById(id);return View(news);La paginapuòereditaredaSystem.Web.Mvc.ViewPage<T> per facilitare la scrittura del codice nella ViewPassaggio di dati controller -> view
  • 20. 09/04/2010www.xedotnet.org16Passaggio di dati view -> controllerSubmit della form (HttpPost)Richiesta tramite AJAXPassaggio di dati view -> controller<% using (Html.BeginForm()) {%><fieldset> <%= Html.TextBoxFor(model => model.Author)%> <p> <input type="submit" value="Create" /> </p></fieldset><% } %>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();
  • 21. 09/04/2010www.xedotnet.org17HTML HelperPermette di agevolare la creazione di controlli HTML per la visualizzazione/modifica dei dati del modelV 1.0Solo tramite stringheEsegnalazione errori solo a run-timeV 2.0Uso di lambda expressionSegnalazione errori a compile-timeHTML Helper
  • 22. ValidazioneV 1.0 Server-side ValidationV 2.0Client-side ValidationData AnnotationModel Validation Provider  custom validation providerValidazione09/04/2010www.xedotnet.org18
  • 23. 09/04/2010www.xedotnet.org19AreasPermette di suddividere l’applicazione in sotto-applicazioni MVCMaggiore separazione dei compiti/ruoliMaggiore controllo del codice nell’applicazioneRoutingControllers, Models e ViewPermessiAreas
  • 24. HTML.RenderActionHTML.RenderActionPossibilità 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 viewV 2.0: Html.RenderAction e Html.ActionChiamo un Action Method dalla View Posso riutilizzare anche la Business Logichttp://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx09/04/2010www.xedotnet.org20
  • 25. 09/04/2010www.xedotnet.org21jQueryE’ incluso nel template di progetto MVCLibreria 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
  • 26. Controller AsincroniPossibilità di utilizzare Controller AsincroniGestione simile a quella delle Web FormSituazioni di thread StarvationThread del pool «schedula» l’esecuzioneIn genere:I/O usato moltoNo se viene usata tanta CPUSi vuole cancellare un’operazione Long-Runninghttp://msdn.microsoft.com/en-us/library/ee728598(VS.100).aspxhttp://blog.stevensanderson.com/2010/01/25/measuring-the-performance-of-asynchronous-controllers/09/04/2010www.xedotnet.org22