Skip to main content

ASP.NET MVC: 4 modi per rendere una proprietà del ViewBag disponibile in tutte le View

Quando si ha a che fare con siti che prevedono un gran numero di View capita spesso di trovarsi a inserire ripetutamente alcune variabili nell’oggetto ViewBag di ciascuna di esse. Alcuni esempi tra i più ricorrenti, per lo meno nei miei progetti, sono i classici IsAdmin, IsAuthenticated, AvatarURL e così via. In questo tipo di situazioni, onde evitare di scrivere ripetutamente lo stesso codice, è consigliabile adottare un metodo che consenta di inserire queste variabili nel ViewBag di tutte le viste in modo centralizzato. Gli approcci che vanno per la maggiore per ottenere questo risultato sono i seguenti:

1. Utilizzare una Base Class.

PRO: Semplice da implementare, efficace, centralizzato (fin troppo).
CONTRO: Costringe a derivare tutti i controller dalla base class, il che può risultare sconveniente se si ha a che fare con un gran numero di controller già esistenti e/o basati su classi base non modificabili.

 

2. Utilizzare un Module.

PRO: Nessuno in particolare.
CONTRO: Nessuno in particolare (a parte una scarsa intuitività del metodo).

 

3. Impostare la proprietà in fase di RegisterController

PRO: Ideale per un design pattern basato su IoC.
CONTRO: Non ha molto senso in tutti gli altri casi.

 

4. Utilizzare un ActionFilter e registrarlo in fase di Global.asax / Application_Start.

PRO: E’ il metodo meno invasivo (e più versatile) tra quelli proposti.
CONTRO: Nessuno in particolare.

Come sempre, la soluzione preferibile varia a seconda delle caratteristiche del progetto e delle necessità dello sviluppatore: ciò detto, la mia preferita è senz’altro la quarta per i motivi espressi.

E la vostra?

RELATED POSTS
 

Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane.

Leggi articolo precedente:
ASP.NET: Creare un sito web MVC5 con Database MySQL, Entity Framework 6 Code-First e Visual Studio 2013

Le nuove potenzialità di EF6 consentono di creare un sito web e relativo data model con poche righe di codice....

Chiudi