Come già detto, la classe System.Web.Mvc.ViewPage da cui ereditano tutte le viste scritte per il WebForms View Engine mette a disposizione dello sviluppatore alcune proprietà molto utili.
La prima di cui ci andiamo ad occupare è Model. Questa proprietà di tipo object funziona da contenitore per i dati che la vista dovrà mostrare all'utente. Il compito di inserire i dati in questa proprietà, come in altre che vedremo tra poco, spetta al controller.
Riprendiamo il codice del controller GalleryController relativo all'azione Index:
Azione Index di GalleryController
public ViewResult Index()
{
// Estraggo la lista delle immagini dal database
GalleryDataContext context = new GalleryDataContext();
List<GalleryImage> images = context.GetImages();
// Richiamo la vista corrispondente all'azione
// In questo caso la vista mostrerà la lista delle immagini
return View(images);
}
Il codice all'interno del metodo estrae la lista delle immagini dal database e la passa poi alla vista corrispondente attraverso una chiamata al metodo View. Questi dati verranno memorizzati nella proprietà Model della nostra vista.
Sarà quindi possibile utilizzare i dati all'interno della view:
Vista relativa all'azione Index di GalleryController
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> ... <!-- Corpo della pagina --> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> ... <% // Effettuo il cast per ottenere una lista dalla proprietà Model // (di tipo object) var images = (List<GalleryImage>)(this.Model); // Se nella lista sono presenti immagini le visualizzo if (images.Count > 0) { %> <ul class="gallery"> <% // Stampo la descrizione per ogni immagine foreach (var image in images) { %> ... <% } %> </ul> <% } else // Altrimenti mostro un messaggio di errore { %> <p>Nessuna immagine presente nel database.</p> <% } %> </asp:Content>
Per maggior chiarezza, nel listato precedente abbiamo omesso alcune porzioni di codice. Dato che la proprietà Model è definita come object, abbiamo bisogno di effettuare una cast a List<GalleryImage> per accedere ai dati:
// Effettuo il cast per ottenere una lista dalla proprietà Model (di tipo object)
var images = (List<GalleryImage>)(this.Model);
Come vedremo nella prossima lezione è possibile evitare questo passaggio superfluo (e dispendioso per quanto riguarda le risorse impiegate) utilizzando viste con Model fortemente tipizzato.
Una volta ottenuta la lista delle immagini, le mostro a video utilizzando un ciclo foreach oppure visualizzo un messaggio di errore nel caso in cui la lista sia vuota.
Questo è il risultato:
Se vuoi aggiornamenti su .NET inserisci la tua email nel box qui sotto: