我做了一个修改用户资料的页面,  里面是给用户修改个人信息的. 我全都用了textbox.在pageload的时候.用sqldataread把全部数据库内容放到了每个textbox中,
.但是问题也出在了这里.我之后在修改textbox里的text..怎么提交..内容都是原来的...
我发现似乎不该把取数据放在pageload里..但是我不知道该怎么做好..初学asp.net.
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using System.Data.Sql;public partial class UserInfoChange : System.Web.UI.Page
{    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.IsPostBack)
        {
            if (Session["NAME_user"] == null || Session["ROLE_user"] == null)
            {
                Response.Redirect("~/UserLogin.aspx");
            }
            else
            {
                this.Label3.Text = Convert.ToString(Session["NAME_user"]);
            }
        }        
        string strCon = "Data Source=(local);Database=Meet;Integrated Security=SSPI";
        SqlConnection sqlcon = new SqlConnection(strCon);
        string sql = "select * from [user] where NAME_user='" + this.Label3.Text + "'";
        SqlCommand cmd = new SqlCommand(sql, sqlcon);
        sqlcon.Open();
        SqlDataReader sdr = cmd.ExecuteReader();
       
        while (sdr.Read())
        {
            this.MMTextBox.Text = sdr["CODE_user"].ToString();
            this.XBTextBox.Text = sdr["SEX_user"].ToString();
            this.XMTextBox.Text = sdr["RealName_user"].ToString();
            this.SRTextBox.Text = sdr["BIRTH_user"].ToString();
            this.UXTextBox.Text = sdr["EMAIL_user"].ToString();
            this.GSTextBox.Text = sdr["COMPANY_user"].ToString();
        }
        sqlcon.Close();
    }    protected void Button1_Click(object sender, EventArgs e)
    {
        if (XMMTextBox.Text != "")
        {
            SqlConnection sqlcon;
            SqlCommand sqlcom;
            string strCon = "Data Source=(local);Database=Meet;Integrated Security=SSPI";
            sqlcon = new SqlConnection(strCon);
            string sqlstr = "update [user] set CODE_user='" + this.XMMTextBox.Text.ToString().Trim() +
                "',SEX_user='" + this.XBTextBox.Text.ToString().Trim() +
                "',RealName_user='" + this.XMTextBox.Text.ToString().Trim() +
                "',BIRTH_user='" + this.SRTextBox.Text.ToString().Trim() +
                "',EMAIL_user='" + this.UXTextBox.Text.ToString().Trim() +
                "',COMPANY_user='" + this.GSTextBox.Text.ToString().Trim() + "' where NAME_user='" + this.Label3.Text + "'";
            sqlcom = new SqlCommand(sqlstr, sqlcon);
            sqlcon.Open();
            sqlcom.ExecuteNonQuery();
            sqlcon.Close();
            Response.Write("<script>alert('修改成功!请重新登录');</script>");
            Response.Write("<script language=javascript>window.parent.location.href='UserLogin.aspx'</script>");
        }
        else
        {
            SqlConnection sqlcon;
            SqlCommand sqlcom;
            string strCon = "Data Source=(local);Database=Meet;Integrated Security=SSPI";
            sqlcon = new SqlConnection(strCon);
            string sqlstr = "update [user] set CODE_user='" + this.MMTextBox.Text.ToString().Trim() +
                "',SEX_user='" + this.XBTextBox.Text.ToString().Trim() +
                "',RealName_user='" + this.XMTextBox.Text.ToString().Trim() +
                "',BIRTH_user='" + this.SRTextBox.Text.ToString().Trim() +
                "',EMAIL_user='" + this.UXTextBox.Text.ToString().Trim() +
                "',COMPANY_user='" + this.GSTextBox.Text.ToString().Trim() + "' where NAME_user='" + this.Label3.Text + "'";
            sqlcom = new SqlCommand(sqlstr, sqlcon);
            sqlcon.Open();
            sqlcom.ExecuteNonQuery();
            sqlcon.Close();
            Response.Write("<script>alert('修改成功!');</script>");
        }
    }
}
这是后台代码..

解决方案 »

  1.   

    把读取部分放到非Post里面if (!this.IsPostBack)
    {
         //读取。
    }click button发生的时候,会先调用Page_load,再调用 Button1_Click。这叫做postback.
    因此要在Page_load里判断是不是Postback,如果是就不要从数据库里读取了。
      

  2.   

    2楼正解。放在if (!this.IsPostBack)
    中处理。然后更新数据才能把画面数据更新到后台。
      

  3.   

    放到onprerender事件中,pageload在页面事件出发之前执行的,所以你button事件还没碰到页面数据的时候,就被覆盖成pageload里的了,onprerender事件在button事件执行后执行
      

  4.   

    非常感谢各位..早上又做了点别的页面..测试的时候才发现这个问题还没解决..也学会了postbackd意义..原本仅仅以为是页面回发之类的...感谢2楼.6楼.