在webcontrol的.cs类中查找控件

本文关键字:查找 控件 cs webcontrol | 更新日期: 2023-09-27 18:14:10

我有一些webusercontrols".ascx",想把一些代码放在App_code文件夹中的函数类中,但当我尝试这个代码时,我总是得到"对象引用没有设置为对象的实例。">

 public static void Layout()
    {
    Page pg = (Page)HttpContext.Current.Handler;
    PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");
}

在webcontrol的.cs类中查找控件

如果得到null而不是异常,则意味着Page的计算正确。然而,可能不是

PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");

PHolder控件不太可能真正属于页面。此控件很可能属于某个子控件。FindControl()方法不是递归函数。它只会在直接属于它的控件集合中查找。为了使其工作,您需要传入期望查找此PHolder的实际父控件,或者重载/扩展System.Web.UI.Page中的FindControl方法(如果使用基类,则为基类(,使其递归。不过,使用这种方法要小心,因为页面可能有很多控件,而且这种递归可能非常重。

如果PHolder控件在所有页面中都是通用的,那么将一个属性放置在一个基类中并以这种方式访问它可能不是一个坏主意。

不太确定这是否有帮助,但我有一个ascx,它调用aspx页面中的一个函数,该函数可以执行我需要的任何操作。。

//ascx
protected void btnSave_Click(object sender, EventArgs e)
{
((aspxpage)this.Page).functionName();
}
//aspx
public void functionName()
{
//Call function in app_code class
}