我在通过asp:TextBox更新用户配置文件时遇到问题。 在页面加载时,所有文本框都从数据库sqlserver加载了正确的值。
说First name = SAM {即SAM显示在txtName的文本字段中) 和姓氏= Berton
但是当我将txtName的内容改为SAMANTHA时 和其他文本框类似,并点击更新配置文件按钮,内部txtName.text =“SAM”保留,尽管txtName.text =“SAMANTHA”的内容已更改,通过手动更改文本框的内容。所以相同的值是“SAM” “存储到sqlserver而不是”SAMANTHA“。
protected void Page_Load(object sender, EventArgs e)
{
loadProfileData();
}
protected void loadProfileData()
{
string connStringProfileload = ConfigurationManager.ConnectionStrings["myconnString"].ConnectionString;
SqlConnection conProfLoad = new SqlConnection(connStringProfileload);
conProfLoad.Open();
string emailAddLogin = User.Identity.Name.ToString();
string strSqlProfileLoad = "SELECT * FROM [gen_profile] WHERE [email]=@email";
SqlCommand cmd = new SqlCommand(strSqlProfileLoad, conProfLoad);
cmd.Parameters.AddWithValue("@email", emailAddLogin);
SqlDataReader drProfileLoad = cmd.ExecuteReader();
while (drProfileLoad.Read())
{
txtName.Text = drProfileLoad["fname"].ToString();
txtLastName.Text=drProfileLoad["lname"].ToString();
}
drProfileLoad.Close();
conProfLoad.Close();
}
protected void BtnUpdtProf_Click(object sender, EventArgs e)
{
string connStringProfileUpdate = ConfigurationManager.ConnectionStrings["myconnString"].ConnectionString;
SqlConnection conUpdateProf = new SqlConnection(connStringProfileUpdate);
conUpdateProf.Open();
string emailAddLogin = User.Identity.Name.ToString();
string strSqlUpdateProf = "UPDATE gen_profile SET fname =@fname, lname =@lname where email=@email;";
SqlCommand cmdUpdate = new SqlCommand(strSqlUpdateProf, conUpdateProf);
cmdUpdate.Parameters.AddWithValue("@fname", txtName.Text.ToUpper().Trim());
cmdUpdate.Parameters.AddWithValue("@lname", txtLastName.Text.ToUpper().Trim());
cmdUpdate.Parameters.AddWithValue("@email", emailAddLogin);
int i = cmdUpdate.ExecuteNonQuery();
conUpdateProf.Close();
if (i == 1)
Response.Redirect("~/prof/resp_update_prof.aspx");
}
答案 0 :(得分:3)
更改此方法:
protected void Page_Load(object sender, EventArgs e) {
loadProfileData();
}
到:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) loadProfileData();
}
基本上,您的textBox值正在页面加载事件中重置,因此每次页面回发时,它都会重置文本框中的值,然后将它们保存回数据库。
答案 1 :(得分:0)
这是因为在你的按钮点击事件之前,会触发page_load,重新填充文本框。
您可以通过检查回复来阻止这种情况发生,如下所示:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
loadProfileData();
}
}