1

我有一些 webusercontrols “.ascx”,并希望将一些代码放入 App_Code 文件夹中的函数类中,但是当我尝试此代码时,我不断收到“对象引用未设置为对象的实例”。

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

2 回答 2

0

不太确定这是否有帮助,但我有一个 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
}
于 2011-11-09T15:23:35.200 回答
0

如果您得到 null 而不是异常,那么这意味着Page正在正确评估。但是,可能不是

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

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

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

于 2011-11-09T15:21:07.500 回答