关于数据控件的数据通过手工绑定或通过数据源控件绑定的问题

最近发现数据控件(我这里用Repeater)如果通过手工绑定一个数据源的话,如果回发时又一次绑定数据的话该数据控件里的服务器控件将不能保存其控件状态,大致代码如下:(Repeater控件内的TextBox1(TextBox1并没有绑定数据,只是在Repeater控件内),用Label1来获取回发后TextBox1的值)
protected void Page_Load(object sender,EventArgs e)
{
  ......这里省略了获取数据的代码
  Repeater1.DataSource=...;
  Repeater1.DataBind();
}
protected void Button1_Click(object sender,EventArgs e)
{
  string str="";
  foreach(RepeaterItem item in Repeater1.Items)
  {
  str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值  
  }
  Label1.text=str;
}
得到的结果很明确,就是Repeater1控件内的TextBox1在网页回发后,如果Repeater1在回发时绑定的话,TextBox1将不能保持其在回发前输入的值,如果Repeater1在回发时不绑定的话,则TextBox1将能保持其在回发前输入的值,即改成如下代码:
protected void Page_Load(object sender,EventArgs e)
{
  if(!IsPostBack)
  {
  ......这里省略了获取数据的代码
  Repeater1.DataSource=...;
  Repeater1.DataBind();
  }
}
protected void Button1_Click(object sender,EventArgs e)
{
  string str="";
  foreach(RepeaterItem item in Repeater1.Items)
  {
  str+=((TextBox)item.FindControl("TextBox1")).Text; //获取回发后TextBox1的值  
  }
  Label1.text=str;
}
如果改成数据源控件提供数据的话,则TextBox1将能保持其在回发前输入的值,也就是和第2种情况一样。
问题:
第1种情况下的TextBox1并没有绑定数据,为什么在Repeater1在回发时绑定数据后不能保存其自身的状态(即不能保持其在回发前输入的值)?
数据源控件提供数据的情况下是在页面生命周期的哪个阶段为数据源控件提供数据的? 为什么这种情况下TextBox1将能保持其在回发前输入的值? 难道默认情况下在回发时数据源控件将不为数据控件提供数据?

幕布斯6054654
浏览 224回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP