[ASP.NET MVC] Filtro de datos básico

Hola, el día de hoy quiero mostrar como es posible realizar un filtro en una colección de datos utilizando ASP.NET MVC, lo primero para realizar este filtro es tener un modelo, para este ejemplo añadiremos una clase de nombre Cliente en la carpeta model, la definición de la clase es muy simple:

   1:  public class Cliente
   2:  {
   3:      public int ClienteId { get; set; }
   4:      public string Nombre { get; set; }
   5:      public string Correo { get; set; }
   6:  }

Ahora vamos a crear el controlador:

   1:  public class ClienteController : Controller
   2:  {
   3:      private static readonly List<Cliente> clientes = new List<Cliente>()
   4:      {
   5:          new Cliente { ClienteId = 1, Nombre = "Julio Avellaneda", Correo = "julito_gtu@hotmail.com"},
   6:          new Cliente { ClienteId = 2, Nombre = "Juan Torres", Correo = "jtorres@hotmail.com"},
   7:          new Cliente { ClienteId = 3, Nombre = "Oscar Camacho", Correo = "oscarca@hotmail.com"},
   8:          new Cliente { ClienteId = 4, Nombre = "Gina Urrego", Correo = "ginna@hotmail.com"},
   9:          new Cliente { ClienteId = 5, Nombre = "Nathalia Ramirez", Correo = "natha@hotmail.com"},
  10:          new Cliente { ClienteId = 6, Nombre = "Raul Rodriguez", Correo = "rodriguez.raul@hotmail.com"},
  11:          new Cliente { ClienteId = 7, Nombre = "Johana Espitia", Correo = "johana_espitia@hotmail.com"}
  12:      };
  13:   
  14:      public ActionResult Index(string name)
  15:      {
  16:          if (string.IsNullOrEmpty(name))
  17:              return View(clientes);
  18:          else
  19:          {
  20:              ViewBag.Name = name;
  21:              return View(clientes.Where(c => c.Nombre.ToLower().Contains(name)));
  22:          }
  23:      }
  24:  }

y en el controlador lo primero es definir la fuente de datos, en este caso es una lista estática pero bien podría ser una consulta a una base de datos, luego definimos la acción Index, la cual como argumento va a recibir el nombre por el cual filtrar, y en la lógica simplemente se valida si name tiene algo o no, en caso negativo se retorna la colección en completa, y en caso contrario se realiza el filtro utilizando Linq.

Ahora la vista:

   1:  @model IEnumerable<HelperForm_Get.Models.Cliente>
   2:   
   3:  @{
   4:      ViewBag.Title = "Index";
   5:  }
   6:   
   7:  <h2>Clientes</h2>
   8:  @using (Html.BeginForm())
   9:  {
  10:  <b>Nombre:</b>
  11:  <input type="text" name="name" value="@ViewBag.Name" />
  12:  <input type="submit" value="Filtrar" />
  13:  <table>
  14:      <tr>
  15:          <td>Cliente Id</td>
  16:          <td>Nombre</td>
  17:          <td>Correo</td>
  18:      </tr>
  19:      @foreach (var item in Model)
  20:      {
  21:          <tr>
  22:              <td>@item.ClienteId</td>
  23:              <td>@item.Nombre</td>
  24:              <td>@item.Correo</td>
  25:          </tr>
  26:      }
  27:  </table>    
  28:  }

Lo primero en la vista es que se define el modelo a utilizar con @model IEnumerable<HelperForm_Get.Models.Cliente> (referencia sobre las vistas), luego se hace uso de un helper para definir el formulario Html.BeginForm() y allí dentro una tabla para mostrar los datos, el resultado inicial es:

image

Y ahora, si digitamos por ejemplo ju en la caja de texto y damos filtrar efectivamente se realiza el filtro:

image

Como se puede observar es bastante simple.

Espero les sea de utilidad el post, saludos!

You may also like...

4 Responses

  1. Juan Lobos says:

    Hola estuve haciendo el ejercicio y me resulta pero quiero hacerlo con 2 campos de filtros y no me filtra por el nombre,me podrias ayudar.Aqui envio parte del codigo que es el mismo tuyo pero modifique para filtrar por 2 campos

    Controlador

    namespace tabla.Controllers
    {
    public class ClienteController : Controller
    {
    private static readonly List clientes = new List()

    {

    new Cliente { ClienteId = 1, Nombre = “Julio Avellaneda”, Correo = “julito_gtu@hotmail.com”},

    new Cliente { ClienteId = 2, Nombre = “Juan Torres”, Correo = “jtorres@hotmail.com”},

    new Cliente { ClienteId = 3, Nombre = “Oscar Camacho”, Correo = “oscarca@hotmail.com”},

    new Cliente { ClienteId = 4, Nombre = “Gina Urrego”, Correo = “ginna@hotmail.com”},

    new Cliente { ClienteId = 5, Nombre = “Nathalia Ramirez”, Correo = “natha@hotmail.com”},

    new Cliente { ClienteId = 6, Nombre = “Raul Rodriguez”, Correo = “rodriguez.raul@hotmail.com”},

    new Cliente { ClienteId = 7, Nombre = “Johana Espitia”, Correo = “johana_espitia@hotmail.com”}

    };

    public ActionResult Index(string nombre, string correo)
    {

    if (!String.IsNullOrEmpty(nombre))
    return View(clientes.Where(c => c.Nombre.ToLower().Contains(nombre)));
    else
    if (!String.IsNullOrEmpty(correo))
    return View(clientes.Where(p => p.Correo.ToLower().Contains(correo)));
    else
    {
    return View(clientes);
    }

    }

    }
    }

    En la vista

    @using (Html.BeginForm()){

    Nombre: @Html.TextBox(“nombre”)

    Correo: @Html.TextBox(“correo”)

    }

    Si me pudieras ayudar te lo agradeceria ya que estoy haciendo mi proyecto de titulo en mvc y soy novato y he aprendido gracias a ti en esto de la preogramacion.

  1. September 25, 2012

    […] [ASP.NET MVC] Filtro de datos básico […]

  2. October 5, 2012

    […] [ASP.NET MVC] Filtro de datos básico […]

  3. December 19, 2012

    […] [ASP.NET MVC] Filtro de datos básico […]

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: