Introduzione al databinding con ASP.NET MVC

di Alessio Leoncini, in ASP.NET MVC, DataBinding,

In ASP.NET MVC le funzionalità di DataBinding sono meno estese in confronto all'architettura classica a cui si è abituati con ASP.NET.
Per sfruttare le caratteristiche di testabilità che vengono offerte molti degli automatismi sono demandati ad un'implementazione manuale del trasferimento dei dati dal Model alla View, attraverso la classe che fa da Controller.
Tale classe gestisce le interazioni con le relative View e può occuparsi della distribuzione dei dati all'interfaccia utente accedendo appunto ai dati gestiti dal Model.

In ASP.NET MVC è possibile creare tale tipologia di classe ereditando dalla classe astratta Controller. Sfruttando la classe base è possibile trasferire i dati alla View, passandoli semplicemente come parametro al metodo View():

public ActionResult Books()
{
  BookModel _model = new BookModel();
  List<BookModel.Book> _books = _model.GetList();

  return View(_books);
}

I dati passati possono disponibili anche nel markup della classe View attraverso la proprietà ViewData.Model, tali dati possono essere infine renderizzati eseguendo ad esempio un semplice ciclo:

<table>
  <tr>
    <th>Title</th>
    <th>Author</th>
 </tr>
 <% foreach (BookModel.Book book in (IEnumerable)ViewData.Model)
    { %>
      <tr>
        <td>
           <%= Html.Encode(book.Title)%>
         </td>
         <td>
           <%= Html.Encode(book.Author)%>
         </td>
      </tr>
  <% } %>
</table>

Oltre a questa modalità è possibile sfruttare un modello a "template", così da renderizzare i dati utilizzando il metodo RenderPartial della classe helper Html.
Con tale metodo è possibile specificare il nome del template da utilizzare ed il DataModel da visualizzare:

<table>
  <tr>
     <th>Title</th>
     <th>Author</th>
  </tr>
  <% foreach (BookModel.Book book in (IEnumerable)ViewData.Model)
    {
      Html.RenderPartial("BookTemplate", book);
    }
  %>
</table>

Utilizzando un template è possibile realizzare porzioni di markup da riutilizzare in più parti dell'applicazione.
Una classe Template può essere realizzata come UserControl ereditando dalla classe generica System.Web.Mvc.ViewUserControl:

public partial class BookTemplate :
      System.Web.Mvc.ViewUserControl<BookModel.Book>{}

Specificando la classe del Model da utilizzare, nel markup del template è possibile accedere in modo tipizzato alle proprietà attraverso l'oggetto ViewData.Model:

<tr>
  <td>
      <b><%= Html.Encode(ViewData.Model.Title)%></b>
  </td>
  <td>
      <%= Html.Encode(ViewData.Model.Author)%>
  </td>
</tr>

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi