none
Problema con ListBox RRS feed

  • Pregunta

  • Estoy haciendo una aplicacion en aspx.net y C# para las operaciones del lado del servidor.

    Tengo dos ListBox, el primero carga datos desde SQL y el segundo carga los items según el usuario los selecciona en el primero.

    El problema es que cuando ejecuto la operacion mediante un Button lo que pasé al segundo ListBox vuelve al primero como cuando recién cargué la página.

    Necesito acceder al contenido que me borra desde C# ¡por favor! ¿Alguien tiene idea de lo que pasa?

    Gracias


    GabyGio

    sábado, 4 de enero de 2020 20:34

Todas las respuestas

  • Seguramente lo que ocurre es que no has implementado correctamente los eventos del ciclo de vida de la página aspx. Si previamente te dedicabas a las aplicaciones de escritorio, tienes que tener presente que asp.net funciona de forma muy distinta a pesar de que "aparentemente" te deja construir un formulario con eventos que parece funcionar de la misma manera que los formularios de escritorio.

    La cuestión es que en aspx, la clase que implementa el formulario no persiste durante toda la vida del formulario, sino que se crea, se ejecuta y se destruye cada vez que ocurre un postback (es decir, cada vez que pulsas un botón u ocurre cualquier otro evento en el formulario).

    Por lo tanto, todo lo que guardes en variables de la clase se pierde cada vez que haces click en un botón.

    Lo que esté en pantalla asociado a un control de asp.net no se pierde gracias a que durante el postback se transmite desde el navegador al servidor, éste toma los datos, y los vuelve a cargar en el control que acaba de reconstruir. Pero esto solo vale para los controles input, que son los únicos que el navegador envía de vuelta al servidor al hacer un post.

    Otros tipos de controles, tales como los ListBox no se transmiten. Por lo tanto su contenido se pierde. Si necesitas preservarlo durante los postback, tienes que regenerarlo en lado servidor. Esto se suele hacer típicamente en el evento Page_Load, que se dispara en todos los postbacks (¡no solo una vez al cargar inicialmente el form como ocurre en una aplicación de escritorio!). Ahí dentro tienes que volver a leer los datos desde donde los tengas salvados y volverlos a meter en el ListBox. Ese "donde los tengas salvados" puede usar una variedad de mecanismos para salvar la información, tales como el Session o el ViewState.

    Si no conoces esto, es importante que lo estudies, porque es algo fundamental en las aplicaciones aspx. De no tener esto en cuenta y no usar estos mecanismos, se pierden los datos a cada postback (como ya has descubierto), por lo que es vital tener muy claro como funciona este ciclo de vida y los mecanismos de conservación del estado.

    domingo, 5 de enero de 2020 8:18
  • hola

    >>El problema es que cuando ejecuto la operacion mediante un Button lo que pasé al segundo ListBox vuelve al primero como cuando recién cargué la página.

    si la lista del primer ListBox la asignas en el evento Page_Load recuerda que debes estar dentro de la pregunta

    if(!IsPostBack){
    
        //aqui codigo
    
    }


    sino cuando se ejecute el evento del boton va a recargar el listbox y perderas la seleccion que el usuario realizo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 6 de enero de 2020 5:11
  • Gracias gente por la ayuda... tengo claro el tema de postback, de hecho tengo difderentes códigos en el Page_Load para cuando la página carga por primera vez y cuando carga luego (en la primera carga es cuando traigo la info desde BD y luego la manipulo. El problema es que no coseguía persistir el estado de los listbox la llamar al servidor. Siempre ejecutaba el método del OnClick me devolvía todos items al listbox primero. De todos modos ya lo solucioné guardando los items que selecciono en un HiddenField que al igual que los Textbox persiten luego tocar el botón.


    GabyGio

    lunes, 6 de enero de 2020 10:30
  • hola

    >>Siempre ejecutaba el método del OnClick me devolvía todos items al listbox primero

    la verdad no se qu es lo que estaras haciendo

    ListControl.SelectedValue

    pero si usas el SelectedValue solo deberia tener un valor seleccionado no podria devolverte todos

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 6 de enero de 2020 12:04