我在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对象仍然具有我需要列出的控件。
有什么想法吗?
答案 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;
}