所以我假设这与页面生命周期有关,也许控件还没有绑定到页面加载?老实说,我还在学习ASP.NET页面生命周期,绑定发生时,何时可以访问某些数据以及何时太早/太晚等等。我只是想要解释为什么以下内容不起作用。假设一个递归搜索Controls的方法,从RepeaterItem开始,寻找一个TextBox,就像这样......
private void FindMyTextBox()
{
foreach (RepeaterItem repeated in myRepeater.Items)
{
TextBox txtPercentage = (TextBox)FindControlRecursive(repeated, "txtPercentage");
.
.
.
}
}
.... ....其中
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
...为什么这个工作会从一个绑定到OnClick
事件的方法调用,比如....
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="Validate" />
protected void Validate(object sender, EventArgs e)
{
FindMyTextBox();
}
...但不是从Page_Load调用时,就像....
protected void Page_Load(object sender, EventArgs e)
{
FindMyTextBox();
}