为什么可以在OnClick事件中找到控件,但不能在页面加载中找到?

时间:2013-04-09 06:29:34

标签: c# asp.net events webforms page-lifecycle

所以我假设这与页面生命周期有关,也许控件还没有绑定到页面加载?老实说,我还在学习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();
}

0 个答案:

没有答案