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

Posted on


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!

About these ads

4 comentarios en “[ASP.NET MVC] Filtro de datos básico

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

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

    Resumen Post 2012 « Todo en ASP.NET escribió:
    12/19/2012 en 22:06

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

    Juan Lobos escribió:
    09/26/2013 en 14:03

    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.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s