2011-11-09 33 views
1

的.cs類我有一些webusercontrols「的.ascx」,並希望地方一些代碼,功能類在App_Code文件夾,但是當我嘗試這個代碼,我不斷收到「對象引用不設置到對象的實例「。的FindControl在從Control

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

你能解釋一下關於哪條線更多信息你得到null? 'pg'還是'PH'? – clklachu

+0

我認爲他的佔位符PH爲null,因爲頁面的生命週期還沒有完成。我想,他也許能找到他的控制,如果他使用的形式[「Id_form」] ...(僅假設這裏) – Nordes

+0

得到這個錯誤:對象引用不設置到對象的實例。 – Chris

回答

0

如果您收到空值而不是例外,那麼這意味着Page正在正確評估。然而,有些東西可能不是

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

PHolder控件實際上不太可能屬於頁面。這個控件很可能屬於某個孩子控制。 FindControl()方法不是遞歸函數。它只會查看立即屬於它的控件集合。爲了使這個工作,你要麼需要在你希望找到這個PHolder或過載的實際父控件傳遞/在System.Web.UI.Page延長FindControl方法(或基類,如果你正在使用一個)是遞歸的。小心使用這種方法,但因爲網頁可以有控制了很多,這種遞歸可以來果斷地沉重。

如果PHolder控件在所有頁面中都是通用的,那麼將一個屬性放在一個基類中並不是一個壞主意,該基類持有對此PHolder對象的引用並以此方式訪問它。

0

不太清楚,如果這有助於但是我有一個調用在aspx頁面的函數的ASCX和該函數的作用不管它是什麼,我需要..

//ascx 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
((aspxpage)this.Page).functionName(); 
} 

//aspx 

public void functionName() 
{ 
//Call function in app_code class 
}