我有一个网站。从网页的每个页面我想调用一个函数,它将接收一个类型为Page的参数。每个页面都会将自身的引用传递给该函数。
该功能将根据某些逻辑隐藏并显示该页面上的某些控件。
现在我不确定如何传递page参数。如果我传递“this
”,我将无法找到任何我想隐藏或显示的控件。这是我的功能
public static void Implement(string pageName, Page objPage)
{
if (pageName == "MANAGEMENT")
{
HyperLink obj = (HyperLink) objPage.FindControl("hlSave");
if (obj != null)
{
obj.Visible = false;
}
}
}
但objPage.FindControl("hlSave");
始终返回null
这里有什么想法吗?
答案 0 :(得分:2)
如果您使用master page
,则可能导致FindControl
返回null
。在这种情况下,您可以使用:
HyperLink obj = (HyperLink)objPage.Master.FindControl("ContentPlaceHolderID").FindControl("hlSave");
或者您可以使用以下方法递归查找hlSave
:
public static Control FindControlRecursive(Control Root, string Id)
{
if (Root.ID == Id)
return Root;
foreach (Control Ctl in Root.Controls)
{
Control FoundCtl = FindControlRecursive(Ctl, Id);
if (FoundCtl != null)
return FoundCtl;
}
return null;
}
您可以像:
一样使用它HyperLink obj = (HyperLink)FindControlRecursive(objPage, "hlSave");