none
Problema con Page_Load asp.net RRS feed

  • Pregunta

  • Veran, tengo el siguiente problema.

    En la siguiente imagen tengo una serie de datos que provienen de una base de datos, inicialmente esta deshabilitada la edicion de los campos. Un boton llamado Modificar habilita los campos para editarlos.

    En una pregunta que formulaba anteriormente tenia el problema que aunque el usuario editara el campo FEX.04 VIE, al actualizarlo (enviarlos datos a la base de datos), enviaba el dato que ven arriba. Ese problema lo solucione (en parte) usando la propiedad IsPostBack con un if(!IsPostBack). Digo solucionado en parte porque aunque ahora si envia a la base de datos el valor FEX.04 VIE editado, no soy capaz de hacer una comparacion entre el dato anterior y el modificado porque me dice que son iguales, es decir, si pongo 8088, automaticamente el dato anterior y el modificadoson iguales 8088.

    protected void Page_Load(object sender, EventArgs e)
        {
    		
            if (!IsPostBack)
            {
                if (Request.QueryString["ID_Proy"] != null && Session["ID"] == null)
                {
                    TablaContratos contratos = new TablaContratos();
                    int idproy1 = Convert.ToInt32(Request.QueryString["ID_Proy"]);
                    Session["ID"] = idproy1;
                    Mostrar(idproy1);
                    int id_contrato = contratos.Consultar_Id_Contrato(idproy1);
    
                    if (id_contrato != 0)
                    {
                        Session["ID_Contrato"] = contratos.Consultar_Id_Contrato(idproy1);
                    }
                    else
                    {
                        Session["ID_Contrato"] = null;
                    }
                }
                else if (Session["ID"] != null)
                {
                    int id_proy2 = Convert.ToInt32(Session["ID"]);
                    Mostrar(id_proy2);
                }
                
                estado.Text = "Aun no hay postback :D";
            }
            else
            {
                nombre = Txt_Nombre.Text;
                valor = Txt_Valor.Text;
                fechaVie = Txt_fechaVie.Text;
                regVie = Txt_RegistroVie.Text;
                estado.Text = "Ocurrio un postback :S";
            }
    
            ClientScript.GetPostBackEventReference(this, string.Empty);//This is important to make the "__doPostBack()" method, works properly
    
            if (Request.Form["__EVENTTARGET"] == "EliminarProyecto")
            {
                //call the method
                EliminarProyecto();
            }
        }

    Este es el codigo Page_Load.


    Brayan Guerrero

    jueves, 16 de noviembre de 2017 21:04

Respuestas

  • hola

    >>automaticamente el dato anterior y el modificadoson iguales 8088

    pero de donde obtienes el dato anterior? lo recuperas de la db

    me llama la atencion el codigo que pones en el else del if que valida el IsPostBack, para que es ese codigo

    porque no codificas en el evento click de un boton ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 16 de noviembre de 2017 21:41
  • Veran, tengo el siguiente problema.

    En la siguiente imagen tengo una serie de datos que provienen de una base de datos, inicialmente esta deshabilitada la edicion de los campos. Un boton llamado Modificar habilita los campos para editarlos.

    En una pregunta que formulaba anteriormente tenia el problema que aunque el usuario editara el campo FEX.04 VIE, al actualizarlo (enviarlos datos a la base de datos), enviaba el dato que ven arriba. Ese problema lo solucione (en parte) usando la propiedad IsPostBack con un if(!IsPostBack). Digo solucionado en parte porque aunque ahora si envia a la base de datos el valor FEX.04 VIE editado, no soy capaz de hacer una comparacion entre el dato anterior y el modificado porque me dice que son iguales, es decir, si pongo 8088, automaticamente el dato anterior y el modificadoson iguales 8088.

    protected void Page_Load(object sender, EventArgs e)
        {
    		
            if (!IsPostBack)
            {
                if (Request.QueryString["ID_Proy"] != null && Session["ID"] == null)
                {
                    TablaContratos contratos = new TablaContratos();
                    int idproy1 = Convert.ToInt32(Request.QueryString["ID_Proy"]);
                    Session["ID"] = idproy1;
                    Mostrar(idproy1);
                    int id_contrato = contratos.Consultar_Id_Contrato(idproy1);
    
                    if (id_contrato != 0)
                    {
                        Session["ID_Contrato"] = contratos.Consultar_Id_Contrato(idproy1);
                    }
                    else
                    {
                        Session["ID_Contrato"] = null;
                    }
                }
                else if (Session["ID"] != null)
                {
                    int id_proy2 = Convert.ToInt32(Session["ID"]);
                    Mostrar(id_proy2);
                }
                
                estado.Text = "Aun no hay postback :D";
            }
            else
            {
                nombre = Txt_Nombre.Text;
                valor = Txt_Valor.Text;
                fechaVie = Txt_fechaVie.Text;
                regVie = Txt_RegistroVie.Text;
                estado.Text = "Ocurrio un postback :S";
            }
    
            ClientScript.GetPostBackEventReference(this, string.Empty);//This is important to make the "__doPostBack()" method, works properly
    
            if (Request.Form["__EVENTTARGET"] == "EliminarProyecto")
            {
                //call the method
                EliminarProyecto();
            }
        }

    Este es el codigo Page_Load.


    Brayan Guerrero

    Teniendo en cuenta esta pregunta: evento load en asp, y la respuesta que recibió, me di cuenta que estaba yendo contra la corriente, intentando algo que no se puede (al menos por el momento no halle solución). Por lo cual decidí hacer algo tal vez, forzado.

    La solución fue, poner un asp:hiddenfield vacío en la pagina. Cuando el usuario presiona modificar, habilita la modificación de los campos, y también, el campo hiddenfield guarda la información contenida en FEX.04.VIE, de manera que cuando el usuario modifica y da clic en actualizar, se trae el contenido del hiddenfield (valor anterior) y el contenido del textbox regVIE (valor modificado). De esa manera se puede establecer correctamente la comparación.


    Brayan Guerrero

    • Marcado como respuesta Brayan Guerrero jueves, 23 de noviembre de 2017 18:44
    jueves, 23 de noviembre de 2017 18:43

Todas las respuestas

  • hola

    >>automaticamente el dato anterior y el modificadoson iguales 8088

    pero de donde obtienes el dato anterior? lo recuperas de la db

    me llama la atencion el codigo que pones en el else del if que valida el IsPostBack, para que es ese codigo

    porque no codificas en el evento click de un boton ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 16 de noviembre de 2017 21:41
  • Hola Leandro, fijate en el metodo Mostrar que se llama en el Page_Load, ese método trae le info desde la base de datos como dijiste. Entonces, el dato anterior viene de la DB, y el nuevo es el que modifique el usuario. La cuestión es que modifico ese campo, y aunque los cambios se llegan a guardar en la DB, no puedo saber mediante codigo, si el anterior o el nuevo sean diferentes, porque como te digo, resultan siempre iguales.

    Brayan Guerrero

    martes, 21 de noviembre de 2017 19:11
  • Veran, tengo el siguiente problema.

    En la siguiente imagen tengo una serie de datos que provienen de una base de datos, inicialmente esta deshabilitada la edicion de los campos. Un boton llamado Modificar habilita los campos para editarlos.

    En una pregunta que formulaba anteriormente tenia el problema que aunque el usuario editara el campo FEX.04 VIE, al actualizarlo (enviarlos datos a la base de datos), enviaba el dato que ven arriba. Ese problema lo solucione (en parte) usando la propiedad IsPostBack con un if(!IsPostBack). Digo solucionado en parte porque aunque ahora si envia a la base de datos el valor FEX.04 VIE editado, no soy capaz de hacer una comparacion entre el dato anterior y el modificado porque me dice que son iguales, es decir, si pongo 8088, automaticamente el dato anterior y el modificadoson iguales 8088.

    protected void Page_Load(object sender, EventArgs e)
        {
    		
            if (!IsPostBack)
            {
                if (Request.QueryString["ID_Proy"] != null && Session["ID"] == null)
                {
                    TablaContratos contratos = new TablaContratos();
                    int idproy1 = Convert.ToInt32(Request.QueryString["ID_Proy"]);
                    Session["ID"] = idproy1;
                    Mostrar(idproy1);
                    int id_contrato = contratos.Consultar_Id_Contrato(idproy1);
    
                    if (id_contrato != 0)
                    {
                        Session["ID_Contrato"] = contratos.Consultar_Id_Contrato(idproy1);
                    }
                    else
                    {
                        Session["ID_Contrato"] = null;
                    }
                }
                else if (Session["ID"] != null)
                {
                    int id_proy2 = Convert.ToInt32(Session["ID"]);
                    Mostrar(id_proy2);
                }
                
                estado.Text = "Aun no hay postback :D";
            }
            else
            {
                nombre = Txt_Nombre.Text;
                valor = Txt_Valor.Text;
                fechaVie = Txt_fechaVie.Text;
                regVie = Txt_RegistroVie.Text;
                estado.Text = "Ocurrio un postback :S";
            }
    
            ClientScript.GetPostBackEventReference(this, string.Empty);//This is important to make the "__doPostBack()" method, works properly
    
            if (Request.Form["__EVENTTARGET"] == "EliminarProyecto")
            {
                //call the method
                EliminarProyecto();
            }
        }

    Este es el codigo Page_Load.


    Brayan Guerrero

    Teniendo en cuenta esta pregunta: evento load en asp, y la respuesta que recibió, me di cuenta que estaba yendo contra la corriente, intentando algo que no se puede (al menos por el momento no halle solución). Por lo cual decidí hacer algo tal vez, forzado.

    La solución fue, poner un asp:hiddenfield vacío en la pagina. Cuando el usuario presiona modificar, habilita la modificación de los campos, y también, el campo hiddenfield guarda la información contenida en FEX.04.VIE, de manera que cuando el usuario modifica y da clic en actualizar, se trae el contenido del hiddenfield (valor anterior) y el contenido del textbox regVIE (valor modificado). De esa manera se puede establecer correctamente la comparación.


    Brayan Guerrero

    • Marcado como respuesta Brayan Guerrero jueves, 23 de noviembre de 2017 18:44
    jueves, 23 de noviembre de 2017 18:43