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

时间:2011-04-14 10:58:52

标签: c# asp.net findcontrol

我在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对象仍然具有我需要列出的控件。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

母版页修改页面控件层次结构,因此首先需要从master找到内容placeholde,然后找到实际控件 - 例如,

Master.FindControl("YourContentPlaceholderId").FindControl("ControlName");

有关详细信息,请参阅this article

答案 1 :(得分:1)

您的ltlGenTime控件在哪里?我猜这是在主人身上。

如果它在母版页上,则需要使用

string date = ((Literal)webPage.Master.FindControl("ltlGenTime")).Text;

答案 2 :(得分:0)

请注意FindControl不进行递归搜索。您可能必须找到它所在的适当容器。

答案 3 :(得分:0)

尝试使用我发现的{strong>递归FindControl 函数here

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; 
}