ASP.NET MVC - tutto quello che avresti voluto sapere

Post on 05-Dec-2014

3.005 views 4 download

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

Andrea Dottor – Microsoft MVP ASP.NET/IIS

ASP.NET MVCtutto 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

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

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

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

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

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

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

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

demo

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

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

demo

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

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">

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>

demo

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

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;

demo

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

Mini profiler

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

ELMAH

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

Glimpse

demo