2011-08-29 73 views
2

我有一个网站。从网页的每一页我想调用一个函数,它将接收一个类型为Page的参数。每个页面都会将其自身的引用传递给该函数。ASP.Net - C# - 传递页面作为参数

该功能将根据某些逻辑隐藏并显示该页面上的某些控件。

现在我不知道如何传递页面参数。如果我通过“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

您使用母版页? – NaveenBhat

+0

@Knvn,不,即使您没有使用母版页,我也没有使用母版页 – Riz

+0

,但我提供的FindControlRecursive方法必须找到它(性能较差)。你检查过了吗? – NaveenBhat

回答

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");