none
consulta datos session asp net RRS feed

  • Pregunta

  • Hola estoy empezando con asp.net y tengo problema al querer actualizar unos datos:

    Este método es el que se ejecuta al presionar un botón en el webform. El metodo funciona perfecto para guardar en la BD pero siempre guarda los mismos datos, yo creo que es porque no se actualiza el valor de session["cliente"] 

    Es decir cuando presiono el botón al hacer postback se vuelve a asignar el cliente pero no me estaría tomando los nuevos valores  

    clienteSession = (Clientes)Session["cliente"];

    protected void UpdateUser_Click(object sender, EventArgs e) { //aca una vez que guardo las modificaciones en la BD lo que hago yo es actualizar mi variable

    session["Cliente"]=cliente //donde cliente es el objeto que acabo de guardar en la base de datos } //Por otro lado en el page load tengo esto: if (Session["cliente"] != null) { clienteSession = new Clientes(); clienteSession = (Clientes)Session["cliente"]; cargarDatosCliente(); } else { FormsAuthentication.RedirectToLoginPage();//si la session finalizo entonces lo redirijo a la pagina del login }

    PD: no se si así es que se puede modificar los valores de la session


    EDIT:Bueno parece que no se ve en el código donde actualizo los valores de la session porque me lo copió comentado acá en el post,
    jueves, 19 de septiembre de 2019 6:56

Respuestas

  • Por lo que estuve testeando el problema está en que al presionar el boton hace postback y primero lee está linea que está en el pageLoad

                    clienteSession = (Clientes)Session["cliente"];

    Después de hacer esa asignación ejecuta el método "cargarDatosCliente" que lee los valores que tiene clienteSession (los cuales todavía no están actualizados porque recién se actualiza en el método del botón update)

    luego recién entra al método del botón,y hace session["Cliente"]=cliente. donde cliente contiene los valores de los controles del webform pero esos valores fueron cargados con datos de la session anterior y ahí está el problema


    jueves, 19 de septiembre de 2019 18:02

Todas las respuestas

  • Con esta linea:

    clienteSession = (Clientes)Session["cliente"];

    te esta leyendo el valor anterior que habia en el Session y trayendolo a la variable. Hasta ahi es correcto. Si lo has depurado con el debugger y resulta que no te trae el valor esperado, la sospecha es que el problema se encuentra en el sitio donde guardas el valor en el Session (no en donde lo lees, que es lo que nos has mostrado). Habria que revisar la parte donde guardas ese valor a ver por que no esta ejecutando ese codigo, o si lo ejecuta, a ver por que el valor que aportas para ser guardado no es el esperado.

    Por cierto, la linea anterior de tu codigo en la que guardas un "new Clientes" en la variable es completamente innecesaria y superflua dado que justo en la linea siguiente guardas un nuevo valor distinto dentro de la variable y sobreescribes ese "new Clientes".

    jueves, 19 de septiembre de 2019 9:39
  • hola

    En el codigo que nos muestras recuperas los datos  de la session, pero donde lo asignas ? te focalizas en el lugar incorrecto, no es como lo recuperas sino donde asignas la session donde esta el problema

    ademas porque instancias la variable si despues la vas asignar

    if (Session["cliente"] != null)
    {
       clienteSession = (Clientes)Session["cliente"];
       cargarDatosCliente();
    }

    la asignas con el valor y listo, no necesitas el new

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 19 de septiembre de 2019 12:19
  • Con esta linea:

    clienteSession = (Clientes)Session["cliente"];

    te esta leyendo el valor anterior que habia en el Session y trayendolo a la variable. Hasta ahi es correcto. Si lo has depurado con el debugger y resulta que no te trae el valor esperado, la sospecha es que el problema se encuentra en el sitio donde guardas el valor en el Session (no en donde lo lees, que es lo que nos has mostrado). Habria que revisar la parte donde guardas ese valor a ver por que no esta ejecutando ese codigo, o si lo ejecuta, a ver por que el valor que aportas para ser guardado no es el esperado.

    Por cierto, la linea anterior de tu codigo en la que guardas un "new Clientes" en la variable es completamente innecesaria y superflua dado que justo en la linea siguiente guardas un nuevo valor distinto dentro de la variable y sobreescribes ese "new Clientes".


    Hola , en el método update que adjunté es donde se le asigna los valores a la session pero no se por qué me guarda los viejos
    jueves, 19 de septiembre de 2019 15:57
  • Hola , en el método update que adjunté es donde se le asigna los valores a la session pero no se por qué me guarda los viejos

    No, en ese método no guardas nada, solo lees lo que ya está guardado. Si crees que eso guarda algo, entonces no es de extrañar que no te los esté guardando.

    Para poder guardar algo en el session, hace falta que el Session esté a la izquierda de un signo de asignación:

    Session["cliente"] = ElValorQueQuierasGuardar;

    Observa que en tu método Update no hay ninguna sentencia que sea así.

    jueves, 19 de septiembre de 2019 16:40
  • Hola , en el método update que adjunté es donde se le asigna los valores a la session pero no se por qué me guarda los viejos

    No, en ese método no guardas nada, solo lees lo que ya está guardado. Si crees que eso guarda algo, entonces no es de extrañar que no te los esté guardando.

    Para poder guardar algo en el session, hace falta que el Session esté a la izquierda de un signo de asignación:

    Session["cliente"] = ElValorQueQuierasGuardar;

    Observa que en tu método Update no hay ninguna sentencia que sea así.

    Hola disculpa pero si está en el método que adjunté, me quedó comentado acá cuando lo puse en el post

    protected void UpdateUser_Click(object sender, EventArgs e) { //aca una vez que guardo las modificaciones en la BD lo que hago yo es actualizar mi variable

    session["Cliente"]=cliente //donde cliente es el objeto que acabo de guardar en la base de datos }

    jueves, 19 de septiembre de 2019 17:21
  • Por lo que estuve testeando el problema está en que al presionar el boton hace postback y primero lee está linea que está en el pageLoad

                    clienteSession = (Clientes)Session["cliente"];

    Después de hacer esa asignación ejecuta el método "cargarDatosCliente" que lee los valores que tiene clienteSession (los cuales todavía no están actualizados porque recién se actualiza en el método del botón update)

    luego recién entra al método del botón,y hace session["Cliente"]=cliente. donde cliente contiene los valores de los controles del webform pero esos valores fueron cargados con datos de la session anterior y ahí está el problema


    jueves, 19 de septiembre de 2019 18:02