Torniamo adesso al view engine predefinito di ASP.Net MVC. Nel seguente listato viene presentata una semplice vista relativa all'azione Index del controller GalleryController
del nostro esempio, che si occupa di mostrare a video la lista delle immagini presenti nel database.
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> <%-- Importo i namespace necessari --%> <%@ Import Namespace="ImageGallery.Models" %> <%-- Titolo della pagina --%> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Le mie immagini </asp:Content> <%-- Corpo della pagina --%> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h1 style="margin-bottom: 40px">Le mie immagini</h1> <p><%= Html.ActionLink("Aggiungi immagine", "Create") %></p> <% // 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) { %> <li><a href="<%= Url.Action("Detail", new { id = image.ImageId}) %>"> <img src="/Content/images/<%= Url.Encode(image.FileName + "_t." + image.FileExtension) %>" alt="<%= Html.Encode(image.FileName) %>" /></a> </li> <% } %> </ul> <% } else // Altrimenti mostro un messaggio di errore { %> <p>Nessuna immagine presente nel database.</p> <% } %> </asp:Content>
Ci preoccuperemo di analizzare il codice in dettaglio nelle prossime lezioni. Per ora è importante notare la somiglianza del codice con quello di una pagina ASP.NET tradizionale. La nostra vista, tuttavia, non eredita da System.Web.UI.Page
come tutte le pagine WebForms, ma da System.Web.Mvc.ViewPage
(visibile nella direttiva Page in alto). Quest'ultima classe aggiunge diverse proprietà interessanti che vedremo tra poco.
Sebbene ViewPage
erediti da System.Web.UI.Page
non sarà possibile utilizzare molte funzionalità legate a questa classe. In particolare ASP.NET MVC non gestisce alcun tipo di ViewState nelle pagine, per cui tutti i meccanismi di ASP.NET classico che si basano su questa tecnologia, come la maggior parte dei controlli lato server, semplicemente non funzioneranno.
Inoltre le viste MVC non hanno il solito ciclo di vita delle altre pagine e quindi non forniscono supporto ai vari eventi quali Page_Load
e Page_Init
.
Queste diversità nascono dalla differente organizzazione del codice: mentre in ASP.NET tutte le operazioni, come connessione al database, richiesta dei dati e la visualizzazione di questi ultimi venivano svolte all'interno della pagina, ASP.NET MVC trasferisce tutto il codice applicativo nei controller, lasciando alla vista soltanto l'ultimo compito, ovvero mostrare i dati a video. Questo discorso si estende anche alle master page.