FindControl突然返回对象引用错误ASP.NET/C#

问题描述

|| 我的Global.asax文件中包含以下代码
System.Web.UI.Page webPage = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
string date = ((Literal)webPage.FindControl(\"ltlGenTime\")).Text;
该控件肯定存在于网页上,并且我已经通过检查webPage对象及其基类进行了验证,并且它绝对是一个文字控件。 现在,我进行了一项更改,似乎已引起了这一变化-我为所有页面创建了一个母版页。但是我很困惑,因为webPage对象仍然列出了我需要的控件。 有任何想法吗?     

解决方法

母版页会修改页面控件的层次结构,因此,您首先需要从母版中找到内容占位符,然后找到实际的控件-例如,
Master.FindControl(\"YourContentPlaceholderId\").FindControl(\"ControlName\");
有关更多信息,请参见本文。     ,您的2级控制在哪里?我猜是在主人那里。 如果它在母版页上,则您需要使用
string date = ((Literal)webPage.Master.FindControl(\"ltlGenTime\")).Text;
    ,请注意,
FindControl
不会进行递归搜索。您可能必须找到其所在的适当容器。     ,尝试使用我在这里找到的此递归FindControl函数。
private Control FindControlRecursive(Control root,string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c,id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}