[英]How to get dynamically added UserControl and cast to the Interface implements
我有以下代碼:
Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
到目前為止,一切都按預期進行。 現在,我需要在Button
單擊postback事件,以獲取已加載的控件,並將其強制轉換為使用方法的接口,然后嘗試以下操作:
if (Panel.Controls.Count > 0) {
Control ctrl = Panel.Controls[0] as Control;
IReport rpt = ctrl as IReport;
string result = rpt.AMethodToInvoke();
}
這種轉換不會發生,並且我從面板上獲得的控件是LiteralContol
。
有任何想法嗎? 謝謝。
面板中是否還有其他控件?
也許給您的控件一個ID,這樣
Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
ctrl.ID = "UniqueID";
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
然后在面板上使用FindControl
Control ctrl = Panel.FindControl("UniqueID");
同樣,在動態添加控件時,需要確保在回發時重新添加控件,否則當您運行FindControl()時,它將返回null。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.