我有一些webusercontrols“.ascx”并希望将一些代码放入App_Code文件夹中的函数类中,但是当我尝试这段代码时,我不断得到“对象引用未设置为对象的实例。”
public static void Layout()
{
Page pg = (Page)HttpContext.Current.Handler;
PlaceHolder PH = (PlaceHolder)pg.FindControl("PHolder");
}
答案 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
}