最近發現數據控件(我這里用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
2018-12-07 05:31:43