Come abbiamo visto nella lezione precedente, utilizzare la proprietà Model dichiarata come object
ci costringe ad effettuare continuamente cast per ottenere i dati in forma tipizzata.
Fortunatamente ASP.Net MVC mette a disposizione dello sviluppatore la classe ViewPage<TModel>
che, grazie ai generics, ci permette di utilizzare Model tipizzati.
Il codice seguente è una riscrittura, che fa uso dei generics, di quello appena visto per l'azione Index (attenzione soprattutto alla direttiva Page
in alto):
Vista relativa all'azione Index di GalleryController (utilizzando la classe generica ViewPage<TModel>)
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<ImageGallery.Models.GalleryImage>>" %> ... <%-- Corpo della pagina --%> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> ... <% // Se nella lista sono presenti immagini le visualizzo if (this.Model.Count > 0) { %> <ul class="gallery"> <% // Stampo la descrizione per ogni immagine foreach (var image in this.Model) { %> ... <% } %> </ul> <% } else // Altrimenti mostro un messaggio di errore { %> <p>Nessuna immagine presente nel database.</p> <% } %> </asp:Content>
Il codice, oltre ad essere molto più pulito, sarà anche più veloce da scrivere ed eseguire. Per questi motivi, il consiglio è di utilizzare viste con Model tipizzato quando possibile.