none
[Razor] Filtros para búsquedas (Distintas clases) RRS feed

  • Pregunta

  • Hola comunidad !

    Me encuentro desarrollando una aplicación con MVC 3 sintaxis raor y me he topado con un problema.

    En una vista, debo implementar una busqueda con filtros de la siguiente manera

    Region

    (DropDownList)

    Provincia

    (DropDownList)

    Comuna

    (DropDownList)

    Los datos ya están en la base de datos y con el Entity framework, ya genere sus respectivas clases.(asociadas por cierto)

    Como MVC3 solo acepta una clase de entrada según ley por allí (no se si está mal) cree una clase que dentro implementa una lista de 

    las que necesito, sin embargo al pasarlas a la vista no se como accederlas con razor para mostrarlas.

    Esta es la clase que implemente para pasar a la vista

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.ComponentModel;
    namespace Agilizalo.Models
    {
        public class BuscadorBasico
        {
            private AGILIZALOEntities db = new AGILIZALOEntities();
    
            public List<REGION> region = new List<REGION>();
            public List<PROVINCIA> provincia = new List<PROVINCIA>();
            public List<COMUNA> comuna = new List<COMUNA>();
            public List<DEPARTAMENTO> departamento = new List<DEPARTAMENTO>();
            public List<INSTITUCION> institucion = new List<INSTITUCION>();
            
            public BuscadorBasico()
            {
                region = db.REGION.ToList<REGION>();
                provincia = db.PROVINCIA.ToList<PROVINCIA>();
                comuna = db.COMUNA.ToList<COMUNA>();
                departamento = db.DEPARTAMENTO.ToList<DEPARTAMENTO>();
                institucion = db.INSTITUCION.ToList<INSTITUCION>();
            }
            
        }
    }

    GRACIAS!

    martes, 29 de mayo de 2012 2:44

Respuestas

  • Buenas!

    Pues si pasas a la vista una instancia de BuscadorBasico, entonces desde la vista usas @Model.region para acceder a la lista de regiones, @Model.provincia para acceder a la lista de provincias y así sucesivamente.

    Dicho esto, si quieres usar el helper Html.DropDownList para generar el <select> entonces necesitarás un poco más de trabajo, ya que este helper espera que los elementos sean una colección de SelectListItem.

    Lo ideal es hacer esta transformación en el viewmodel (en tu caso BuscadorBasico) o en el controlador, pero no en la vista ya que esto te "ensuciará el código".

    Podrías utilizar un código parecido a:

    public IEnumerable<SelectListItem> ProvinciasCombo
    {
        get {
            return provincia.Select(x=> new SelectListItem {Text=x.Nombre, Value=x.Id.ToString()});
        }
    }

    Esta propiedad (que añadirias a BuscadorBasico) transforma la variable "provincia" (que es una List<PROVINCIA>) en un IEnumerable<SelectListItem> que es lo que necesita el helper para funcionar.  He supuesto que la propiedad que contiene el nombre de la provincia es Nombre y la que tiene el Id es Id.

    Con esto, ahora en la vista puedes generar la combo automáticamente:

    @Html.DropDownList("idprov", Model.ProvinciasCombo)

    Esto te generará una <select> cuyo name es "idprov". Esta select te mostrará el texto de las provincias y enviará el id de la provincia seleccionada cuando se haga submit del form.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis


    martes, 29 de mayo de 2012 6:38
  • Hola.

    te paso este Link donde hay un ejemplo de lo que necesitas  http://www.infinitedreamers.co.uk/mvc3-ajax-search-tutorial/.

    espero te sirva

    • Marcado como respuesta Eder Costa lunes, 29 de octubre de 2012 11:47
    miércoles, 30 de mayo de 2012 13:52

Todas las respuestas

  • Buenas!

    Pues si pasas a la vista una instancia de BuscadorBasico, entonces desde la vista usas @Model.region para acceder a la lista de regiones, @Model.provincia para acceder a la lista de provincias y así sucesivamente.

    Dicho esto, si quieres usar el helper Html.DropDownList para generar el <select> entonces necesitarás un poco más de trabajo, ya que este helper espera que los elementos sean una colección de SelectListItem.

    Lo ideal es hacer esta transformación en el viewmodel (en tu caso BuscadorBasico) o en el controlador, pero no en la vista ya que esto te "ensuciará el código".

    Podrías utilizar un código parecido a:

    public IEnumerable<SelectListItem> ProvinciasCombo
    {
        get {
            return provincia.Select(x=> new SelectListItem {Text=x.Nombre, Value=x.Id.ToString()});
        }
    }

    Esta propiedad (que añadirias a BuscadorBasico) transforma la variable "provincia" (que es una List<PROVINCIA>) en un IEnumerable<SelectListItem> que es lo que necesita el helper para funcionar.  He supuesto que la propiedad que contiene el nombre de la provincia es Nombre y la que tiene el Id es Id.

    Con esto, ahora en la vista puedes generar la combo automáticamente:

    @Html.DropDownList("idprov", Model.ProvinciasCombo)

    Esto te generará una <select> cuyo name es "idprov". Esta select te mostrará el texto de las provincias y enviará el id de la provincia seleccionada cuando se haga submit del form.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis


    martes, 29 de mayo de 2012 6:38
  • Hola.

    te paso este Link donde hay un ejemplo de lo que necesitas  http://www.infinitedreamers.co.uk/mvc3-ajax-search-tutorial/.

    espero te sirva

    • Marcado como respuesta Eder Costa lunes, 29 de octubre de 2012 11:47
    miércoles, 30 de mayo de 2012 13:52