giovedì 14 ottobre 2010

[C# Asp.net MVC2] Paginazione con MVC Contrib

In una applicazione MVC potrebbe essere necessario paginare i risultati, ovvero, magari il risultato di una query ritorna qualche centinaio di risultati, e nella pagina web vogliamo farne vedere 10 per pagina e navigare tra le pagine.
Non è una cosa complicata, anzi, è molto semplice, sia che venga fatto con "nostro codice", sia utilizzando librerie di terze parti. una di questa librerie è MVC Contrib.
In questo post vi parlerò di MVC Contrib, un progetto per aggiungere funzionalità e  facilità d'uso al Microsoft ASP.NET MVC Framework, utile per gli sviluppatori che cercano di sviluppare e testare gli elementi dell'interfaccia utente, in particolare sull'utilizzo di MVC Contrib Grid, "una griglia" per la paginazione.
Quindi,scarichiamo la libreria, includiamola nel progetto, e nel nostro controller richiamiamo i namespace necessari:

using MvcContrib.Pagination;
using MvcContrib.UI.Grid;
using MvcContrib;
using MvcContrib.UI.Pager;

Immaginiamo di dover visualizzare un elenco di oggetti Customer, richiamati da un repository, definiti come :

public class Customer
{
   public int Id { get; set; }
   public string Surname { get; set; }
   public string Forename {get; set; }
   public DateTime DateOfBirth { get; set; }
}

Nel controller :

public class CustomerController : Controller 
{
   private CustomerRepository _customRep = new CustomerRepository();

    public ActionResult Index(int? page)
   {
     var pagedCustomers = _customRep.FindAll().AsPagination(page ?? 1, 10);
     return View(pagedCustomers);
   }

nella View relativa, invece, importiamo i NameSpace necessari:

<%@ Import Namespace="MvcContrib.UI.Grid" %>
<%@ Import Namespace="MvcContrib.UI.Grid.ActionSyntax" %>
<%@ Import Namespace="MvcContrib.Pagination"%>
<%@ import Namespace="MvcContrib.UI.Pager" %>

 e costruiamo la griglia:

<%= Html.Grid(Model).Columns(column => {
  column.For(cust => cust.Id).Named("Custome ID").DoNotEncode();
  column.For(cust => cust.Surname).Named("Surname").DoNotEncode();
  column.For(cust => cust.DateOfBirth).Named("Date Of Birth").DoNotEncode();
}) %>

<%= Html.Pager((IPagination)Model) %>


Questo è solo un esempietto che mostra come paginare una semplice visualizzazione di risultati, naturalemnte  è possibile inserire all'interno delle "colonne" non solo dati ma altre cose tipo ActionLink, ad esempio:

column.For(cust => Html.ActionLink(cust.Id, "Details", new { id = cust.Id })).Named("Customer ID").DoNotEncode();

invece di mostrare il solo id, crea un link all'actionResult "Details" passando come parametro il customer id;

oppure, ipotizziamo che il customer abbia un ulteriore property chiamata "Photo" dove sia inserito l'indirizzo di un immagine:

column.For(cust => Html.ActionLinkPhoto(cust.Id, cust.Photo, "Details", new { id = cust.Id })).Named("Customer ID").DoNotEncode();

dove ActionLinkPhoto è una classe negli Helper scritta appositamente per avere un action link dove invece di avere una "scritta", si ha un'immagine.

Nessun commento:

Posta un commento

Related Posts Plugin for WordPress, Blogger...