来自webcontrol的.cs类中的findcontrol

时间:2011-11-09 15:15:33

标签: c# .net ascx webusercontrol

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

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

2 个答案:

答案 0 :(得分:0)

如果您获得null而不是例外,那么这意味着Page正在正确评估。但是,可能不是的东西是

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

PHolder控件不太可能实际属于页面。这种控制最有可能属于一些儿童控制。 FindControl()方法不是递归函数。它只会查看立即属于它的控件集合。为了使它能够工作,您需要传入实际的父控件,您希望在其中找到此PHolder,或者在System.Web.UI.Page中重载/扩展FindControl方法(如果您正在使用它,则需要您的基类)是递归的。但请注意这种方法,因为页面可能有很多控件,这种递归可能会非常沉重。

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

答案 1 :(得分: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
}