2010-06-30 78 views
0

我已經建立了一個自定義的ASP.Net網頁用戶控件;這之前做了足夠多的時間,但這一個是行爲不端,我不明白爲什麼。動態添加用戶控件的元素時未初始化?

如果調用頁面直接在其標記中包含用戶控件,則一切正常,並且控件的行爲與預期相同。

但是,如果頁面動態添加此特定控件(對於母版頁中的佔位符,這就是所謂的整個事情),其中的元素保持爲NULL - 用戶控件中的任何內容都不會寫入客戶端包括用戶控件中的靜態內容。

我可能會在哪裏出錯?

+0

你確定你的.ascx路徑是否正確(是否相對)? – Jeroen 2010-07-01 01:16:42

回答

2

答案排序 - ID是微不足道的,它也離不開誰,但如果你

Control a = new Control; 

這是行不通的,而

Control a = (Control)Page.LoadControl("~/Folder/Control.ascx"); 

做工作,這就是我想在深夜忘記:-)

0

當您動態添加用戶控件時,必須爲每個添加的控件生成唯一ID。

例如:

Control selWebControl = (Control)Page.LoadControl("~/DL/Templates/FileLibrary.ascx"); 
selWebControl.ID = "UC" + "_" + dfRow.ID; 
+0

我不必生成一個ID--我確信自動生成的默認值足夠好,而且我確認這沒什麼區別。儘管你已經提醒我需要使用LoadControl,並且_that_解決了這個問題:-) – eftpotrm 2010-07-01 06:56:48

0

確保你將它添加到控件集合在頁面上,並確保你在頁面生命週期正確的時間做這件事。我喜歡重寫CreateChildControls。

所以請確保你正在做Page.Controls.Add(myNewControl)或PlaceHolder1.Controls.Add(myNewControl)。

可能會幫助,如果你表現出的代碼中,你是動態創建控件並將其添加到頁面

1

當你動態加載的用戶控件...

對於ASP.NET網站項目,下面的作品

Control a = new Control; 

對於ASP.NET Web應用程序項目,下面的作品

Control a = (Control)Page.LoadControl("~/Folder/Control.ascx");