ASP.NET MVC - tutto quello che avresti voluto sapere

29
Andrea Dottor – Microsoft MVP ASP.NET/IIS ASP.NET MVC tutto quello che avresti voluto sapere

description

Esistono funzionalità di ASP.NET MVC che non vengono spesso menzionate nei principali tutorial o esempi, ma che possono fare la differenza in molte situazioni. In questa sessione mi voglio concentrare proprio in quelle funzionalità/caratteristiche meno note, e farvi vedere come poter risolvere elegantemente "problematiche" comuni. Localizzazione, customizzazione delle view, EditorTemplate saranno alcuni degli argomenti presi in causa. http://blog.dottor.net/post/2014/02/03/Codice-e-slide-della-sessione-ASPNET-MVC-tutto-quello-che-avresti-voluto-sapere.aspx

Transcript of ASP.NET MVC - tutto quello che avresti voluto sapere

Page 1: ASP.NET MVC - tutto quello che avresti voluto sapere

Andrea Dottor – Microsoft MVP ASP.NET/IIS

ASP.NET MVCtutto quello che avresti voluto sapere

Page 3: ASP.NET MVC - tutto quello che avresti voluto sapere

…di strada ne abbiamo fatta 10 December 2007 ASP.NET MVC CTP

13 March 2009 ASP.NET MVC 1 10 March 2010 ASP.NET MVC 2 13 January 2011 ASP.NET MVC 3 15 August 2012ASP.NET MVC 4 17 October 2013 ASP.NET MVC 5

Evoluzione di ASP.NET MVC

Page 4: ASP.NET MVC - tutto quello che avresti voluto sapere

Tutti gli helper (più) utili sono presenti Scaffolding per la creazione delle

View e Controller Integrazione massima con Entity Framework

Autenticazione e autorizzazione ASP.NET Identity "Social authentication"

Tools Visual Studio 2013

Tutto quello che c’è in ASP.NET WebForm e molto di più

Stato dell’arte di ASP.NET MVC

Page 5: ASP.NET MVC - tutto quello che avresti voluto sapere

Di solito sentiamo parlare di: Il pattern MVC Routing / friendly url View / Output ottimizzato / HTML5 …

Gli argomenti di oggi: Personalizzazioni/customizzazioni Riutilizzo del codice Produttività Log & profiling

Agenda

Page 6: ASP.NET MVC - tutto quello che avresti voluto sapere

Oggi non parleremo di: One ASP.NET ASP.NET Identity Bootstrap Authentication filters Filter overrides Attribute routing

Link:http://www.asp.net/visual-studio/overview/2013/release-notes#TOC10

Novità in ASP.NET MVC 5

Page 7: ASP.NET MVC - tutto quello che avresti voluto sapere

– Personalizzazioni– Riutilizzo del codice– Produttività– Log & profiling

Page 8: ASP.NET MVC - tutto quello che avresti voluto sapere

Il DisplayModeProvider permette di poter avere View distinte per la navigazione da desktop o da mobile Tutto già incluso in ASP.NET MVC

Non devo scrivere nessuna riga di codice, se non quello nella nuova View

Copio la view e la rinomino da Index.cshtml a Index.mobile.cshtml

Personalizzazione View - mobile

Page 9: ASP.NET MVC - tutto quello che avresti voluto sapere

Il DisplayModeProvider può essere presonalizzato Possiamo definire nuove regole

Es: Si possono differenziare View a seconda del dispositivo mobile che sta navigando l’applicazione Index.android.cshtml Index.ios.cshtml Index.wp.cshtml

Personalizzazione View – per tipologia di dispositivo

Page 10: ASP.NET MVC - tutto quello che avresti voluto sapere

Il DisplayModeProvider non ha limiti Possiamo applicare qualsiasi regola

Es: è possibile utilizzarlo per personalizzare le View per installazione o per (qualsiasi altra cosa) Index.nome-cliente.cshtml Index.culture.cshtml Index.tutto-quello-che-volete.cshtml …

Personalizzazione View – per cliente e/o parametro e/o installazione

Page 11: ASP.NET MVC - tutto quello che avresti voluto sapere

demo

Page 12: ASP.NET MVC - tutto quello che avresti voluto sapere

Già visti/sentiti con ASP.NET Dynamic Data

Offrono la possibilità di modificare l’output di default di ASP.NET MVC Sia per la visualizzazione tramite

Html.DisplayFor Sia per l’editing con Html.EditorFor

Applicabili ad un qualsiasi tipo Da String, Int32, DateTime fino ad oggetti

complessi come Product, User, …

Un’ulteriore possibilità per il riuso del codice

Uso di EditorTemplate e DisplayTempate

Page 13: ASP.NET MVC - tutto quello che avresti voluto sapere

Utili per dare una visualizzazione di default ad oggetti complessi Riutilizzo e condivisione di codice Semplificano la visualizzazione e l'editing

Es: utilizzo del controllo DatePicker per editare le date

Creare all'interno dell'opportuna cartella in View: Una cartella EditorTemplates per i

template da visualizzare in fase di modifica Una cartella DisplayTemplates per i

template utilizzati in sola visualizzazione

Uso di EditorTemplate e DisplayTempate

Page 14: ASP.NET MVC - tutto quello che avresti voluto sapere

demo

Page 15: ASP.NET MVC - tutto quello che avresti voluto sapere

Anche le View hanno una classe base System.Web.Mvc.WebViewPage

Il runtime di ASP.NET compila le View facendole ereditare dalla loro classe base

Fornisce accesso agli Helper e ad altre proprietà e metodi (vedi intellisense all'interno di una View) @Helper è una proprietà della classe

WebViewPage

Classe base delle View

Page 16: ASP.NET MVC - tutto quello che avresti voluto sapere

Può essere modifica andandola a specificare in Views/Web.config

Estendere la classe base per: Avere accesso immediato a nuovi Helper Centralizzare codice

Non usare la classe base come fosse il code-behind di una pagina WebForm

Classe base delle View – accesso a nuove proprietà/helper

<pages pageBaseType="System.Web.Mvc.WebViewPage">

Page 17: ASP.NET MVC - tutto quello che avresti voluto sapere

Può essere utilizzata per semplificare l'uso/accesso alle stringhe localizzate Semplificare l’accesso a

HttpContext.GetLocalResourceObject() ES: Esporre un metodo T("key") che

wrappa il tutto

Preso spunto dalla localizzazione di Orchard (e semplificato il tutto)

Classe base delle View – localizzazione

@{     ViewBag.Title = T("Title"); }

<h2>@T("Title")</h2>

Page 18: ASP.NET MVC - tutto quello che avresti voluto sapere

demo

Page 19: ASP.NET MVC - tutto quello che avresti voluto sapere

Paragonabile al creare uno UserControl in WebForm

Gli helper presenti in MVC non coprono tutte le esigenze

Creare un nuovo Helper quando si ha necessità di riutilizzare lo stesso output

Possono essere portati/riutilizzati tra vari progetti

Semplici da creare e da utilizzare

Custom Helpers

Page 20: ASP.NET MVC - tutto quello che avresti voluto sapere

Accesso ai metadati della lambda expression Recupero del nome della proprietà Recupero di eventuali Atrtibuti asociat

Per evitare di inserire gli "using" in ogni View, importare i namespace all'interno del Web.config presente nella cartella Views system.web.webPages.razor > pages >

namespaces

Custom Helpers

var metaData = ModelMetadata.FromLambdaExpression( expression,  htmlHelper.ViewData); var propertyName = metaData.PropertyName; var isReadOnly = metaData.IsReadOnly; var isRequired = metaData.IsRequired;

Page 21: ASP.NET MVC - tutto quello che avresti voluto sapere

demo

Page 22: ASP.NET MVC - tutto quello che avresti voluto sapere

Creato ed utilizzato da StackExchange http://miniprofiler.com/

Cosa profila? An ADO.NET profiler, capable of profiling

calls on raw ADO.NET (SQL Server, Oracle, etc), LINQ-to-SQL, EF (including Code First), Lightspeed and a range of other data access scenarios

A pragmatic Step instrumentation that you can add to code you want to explicitly profile

Simple. Fast. Pragmatic. Useful.

Log & profiling – Mini Profiler

Page 23: ASP.NET MVC - tutto quello che avresti voluto sapere

Mini profiler

Page 24: ASP.NET MVC - tutto quello che avresti voluto sapere

ELMAH (Error Logging Modules and Handlers) https://code.google.com/p/elmah/

Logging delle unhandled exceptions

Pagina per la visione del logging da remoto

Notifica via email RSS feed degli ultimi errori

Log & profiling – ELMAH

Page 25: ASP.NET MVC - tutto quello che avresti voluto sapere

ELMAH

Page 26: ASP.NET MVC - tutto quello che avresti voluto sapere

http://getglimpse.com/ Debugger client-side

Visualizza una barra nel browser simile alla Developer Toolbar o a Firebug

Completamente in JavaScript, Html e CSS

Route bedugger Trace viewer EF / SQL profiler

Log & profiling – Glimpse

Page 27: ASP.NET MVC - tutto quello che avresti voluto sapere

Glimpse

Page 28: ASP.NET MVC - tutto quello che avresti voluto sapere

demo