none
Busqueda por varios criterios RRS feed

  • Pregunta

  • Hola como puedo hacer para que el método Index de mi controlador acepte varios criterios de búsqueda, lo que quiero es que en mi vista Index me despliegue 2 combos o lista desplegables Estados y Servicios, al seleccionarlos debe filtrar las solicitudes que cumplan con dichos criterios.

    mi modelo es mas o menos asi:

    Solicitudes

    id, fecha, id_estado, id_servicio, descripción, valor.

    Estados

    id_estado, descripcion

    Servicios

    id_servicio, descripcion

    Gracias.

    sábado, 6 de julio de 2013 18:17

Todas las respuestas

  • Pon en el controlador dos sobrecargas del método Index. La primera es la "normal", que se ejecuta con GET, y sirve para presentar la pantalla inicial con los dos combos cargados de datos.

    La segunda sobrecarga del Index va decorada con [HttpPost] y recibe dos argumentos cuyos nombres coinciden con los nombres de los combos. De esta forma, cuando el usuario hace un Submit de la página, se envía un POST al servidor que contiene los valores seleccionados en los combos (que supuestamente habrás metido dentro de un <form> en la vista), y ese POST desencadena la sobrecarga del Index que recibe los dos datos. Dentro de esta rutina, filtras los resultados, y los cargas en el modelo pasándoselos a la Vista.

    domingo, 7 de julio de 2013 8:24
  • hola

    como es que estas armando la vista que define los combos ? que entidad de tu modelo utilizas

    porque veo que las entidades que mencioans en ninguna defines uan lista de Estados o Servicio que sirvan de items para cargar los combos

    como envias a la vista la lista para cargar los combos ?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 7 de julio de 2013 14:31
  • Eso es precisamente lo que quiero saber? como defino la lista y que código debo escribir en la vista index..

    Gracias por su amable colaboración, y que pena  pero la verdad aun hay muchos conceptos nuevos para mi, porque recién me estoy iniciando en el tema de desarrollo web, vengo de programa con Visual FoxPro y la brecha es grande.

    lunes, 8 de julio de 2013 13:51
  • Hola gracias, ya lo soluciones asi:

    public ViewResult Index(int lcEstado = 0, int lcServicio=0)
        {
            CotizacionesEntities bd = new CotizacionesEntities();

            var estados = bd.Estados.ToList();
            var servicios = bd.Servicios.ToList();

            estados.Insert(0, new Estados{ id= 0, descripcion  = "" }); //inserta fila en blanco
            servicios.Insert(0, new Servicios { Id = 0, Descripcion = "" });

            var solicitudes1 = from m in db.Solicitudes
                             select m;


            //Pasar la lista de estados a la vista
            ViewData["Estados"] = estados;
            ViewData["id"] = "";
            ViewData["descripcion"] = "";

            //Pasar la lista de servicios a la vista
            ViewData["Servicios"] = servicios;
            ViewData["id"] = "";
            ViewData["descripcion"] = "";

            if (lcEstado != 0)
               {
                solicitudes1 = solicitudes1.Where(c => c.Id_Estado == lcEstado );
               }

            if (lcServicio != 0)         
               return View(solicitudes1.Where (x => x.Id_Servicio==lcServicio));
            else
               {
                return View(solicitudes1);
               }
        }

    Y en mi vista Index:

    @using (Html.BeginForm()){  

         if (ViewData["estados"] != null)
           {
                  if (ViewData["servicios"] != null)
                     {
                        <fieldset>
                           <legend>Filtrar</legend>
                           Estado:   @Html.DropDownList("lcEstado", new SelectList(ViewData["estados"] as      System.Collections.IEnumerable, "id", "descripcion", ViewData["lcEstado"]))     
                           Servicio: @Html.DropDownList("lcServicio", new SelectList(ViewData["servicios"] as System.Collections.IEnumerable, "id", "descripcion", ViewData["lcServicio"]))     
                           <input type="submit" value="Filtrar" />
                        </fieldset>
                     }
           }
           else
           {
             <select id="id" name="descripcion"></select>
             <select id="id1" name="descripcion"></select>
         }

     

    lunes, 8 de julio de 2013 14:08
  • Aunque te haya salido , pienso que empleas mucho codigo para solo llenar 2 combos.

    EL combo se llena de igual forma que un datasource en .net

    me refiero a un value y un text.

    en tu controlador. 

    pudiste haber guardadoel resultado completo en un View.bag

    y este viewbag sera reconocido en tu vista. 

    haciendole referencia a una variable para luego recuperar las propiedades mediante la misma.

    lunes, 8 de julio de 2013 14:22
  • Si, gracias y como seria ese código?
    lunes, 8 de julio de 2013 17:00