none
Problema al mostrar datos de un filtro en webform C# RRS feed

  • Pregunta

  • hola a todos, cuento con un webform el cual realizo un filtro por diferentes campos. Ejemplo:

        protected void ddlAreaServicio_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (Convert.ToInt64(ddlAreaServicio.SelectedValue) != -1)
            {
                if (lstReclamo == null)
                {
                    webService = new WebServiceDC();
                    stReclamo = webService.SelectReclamo("arServ_ID = " + Convert.ToInt64(ddlAreaServicio.SelectedValue));
    
                    JavaScriptSerializer jsSer = new JavaScriptSerializer();
                    lstReclamo = jsSer.Deserialize<List<v_ConsultarReclamo>>(stReclamo);
                }
                else
                {
                    lstReclamo = lstReclamo.FindAll(x => x.arServ_ID == Convert.ToInt64(ddlAreaServicio.SelectedValue));
                }
            }
        }

    A lstReclamo la tengo definida de manera global:

    Pero cuando le doy click al botón para que realice la consulta, lstReclamo queda en null:

    ¿De qué manera puedo hacer para que los datos se mantengan en la lista a medida que voy realizando los filtros?

    Gracias por su atención! Saludos

    sábado, 22 de septiembre de 2018 13:16

Respuestas

  • Fíjate que el lstReclamo lo tienes definido en una variable a nivel de clase. Esto en un WinForm funcionaría. Pero los WebForms son distintos: a cada postaback la clase se construye, se ejecuta y se destruye. No queda construida durante todo el tiempo que la página está visible en el navegador. Piensa que la podrían tener abierta miles de navegadores a la vez.

    Puesto que se construye, se ejecuta y se destruye a cada postback, se pierden todas las variables a cada postback. Por tanto, si quieres conservar algo, tienes que guardarlo en otro sitio que no sea en variables: Puede ser en lado cliente usando cookies o campos hidden (posiblemente por mediación del ViewState) o el querystring, o puede ser en lado servidor usando Session, Application, o un almacén externo tal como una base de datos.

    Para un caso como el tuyo, yo recomendaría o bien el ViewState (si la lista va a ser pequeña) o bien el Session.

    Session["miLista"] =  jsSer.Deserialize<List<v_ConsultarReclamo>>(stReclamo);

    • Propuesto como respuesta Jorge TurradoMVP domingo, 23 de septiembre de 2018 0:16
    • Marcado como respuesta AguFortini domingo, 23 de septiembre de 2018 17:30
    sábado, 22 de septiembre de 2018 18:49