Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Proprietà delle viste: Model

Collegare i dati direttamente alla vista
Collegare i dati direttamente alla vista
Link copiato negli appunti

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:

Figura X. Vista Index
Home page del progetto di esempio

Ti consigliamo anche