1

我用从数据库中获取的数据填充文本框,并在页面上放置一个按钮,用户可以编辑数据并单击此按钮,然后从后面的代码中设置对数据库的更改

但是当我想将数据(例如txtName.Text源值是“John”并且我将其更改为“Tom”)发送到数据库时,我看到txtName.Text的是“John”(意味着最后一个值没有新值)

为什么?

//Load Data
protected void Page_Load(object sender, EventArgs e)
{ 
      DataSet ds = ....
      txtName.Text = ds.Tables[0].Rows[0][1].ToString();
}

//Update
protected void reg_Click(object sender, EventArgs e)
{
     string name=txtName.Text;
     //i change value of txtName.Text but see value as same as value in ds.Tables[0].Rows[0][1].ToString() that i select from DB
}
4

2 回答 2

1

这是因为您在每个请求期间都覆盖了文本框的值。如果将代码放入 aif (!IsPostBack)那么它将起作用:

protected void Page_Load(object sender, EventArgs e)
{
      if (!IsPostBack)
      {
          DataSet ds = ....
          txtName.Text = ds.Tables[0].Rows[0][1].ToString();
      }
}

protected void reg_Click(object sender, EventArgs e)
{
     string name=txtName.Text;
}

如果你在两个Page_Loadand中都设置断点reg_Click,那么事情就会变得很明显。Page_Load每个请求都会调用。在回发的情况下(由单击按钮引起),它在按钮单击处理程序之前调用,因此将用从数据库读取的原始值覆盖文本框的(编辑的)值。

于 2012-10-08T20:32:20.210 回答
0

@Sajjjjjjad - @M4N 是正确的,您需要在“Page_Load”中使用 if(!Page.IsPostBack)。原因是,每次回发时 Page_Load 都会命中,因此根据您的代码,当您调用“reg_Click”方法时,它将首先命中 Page_load 方法,然后是“reg_Click”方法,它将替换您输入的值文本框。

您可以在此处查看 asp.net 页面生命周期以了解页面周期过程 -> http://msdn.microsoft.com/en-us/library/ms178472.aspx这将为您提供更多信息。

如果您有任何问题,请告诉我们。

于 2012-10-08T20:41:38.023 回答