Asp.net 如何在接口实现中动态添加UserControl和cast

Asp.net 如何在接口实现中动态添加UserControl和cast,asp.net,c#-4.0,interface,user-controls,casting,Asp.net,C# 4.0,Interface,User Controls,Casting,我有以下代码: Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx"); IReport rpt = (IReport)ctrl; rpt.LoadData(); Panel.Controls.Add(ctrl); 到目前为止,一切正常。 现在,我需要在按钮上单击postback事件,以获取加载的控件并将其转换到使用方法的界面,并尝试了以下操作: if (Panel.Controls.Count > 0)

我有以下代码:

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
到目前为止,一切正常。 现在,我需要在
按钮上单击postback事件,以获取加载的控件并将其转换到使用方法的界面,并尝试了以下操作:

if (Panel.Controls.Count > 0) {
   Control ctrl = Panel.Controls[0] as Control;
   IReport rpt = ctrl as IReport;
   string result = rpt.AMethodToInvoke();
}
此强制转换无法发生,我从面板获得的控件是
LiteralContol


有什么想法吗?谢谢。

您的面板中还有其他控件吗

也许给你的控制者一个身份证

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
ctrl.ID = "UniqueID";
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
然后用户在面板上查找控件

Control ctrl = Panel.FindControl("UniqueID");

另外,在动态添加控件时,您需要确保在回发时重新添加控件,否则当您运行FindControl()时,它将返回null。

您的面板中还有其他控件吗

也许给你的控制者一个身份证

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
ctrl.ID = "UniqueID";
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);
然后用户在面板上查找控件

Control ctrl = Panel.FindControl("UniqueID");

另外,在动态添加控件时,您需要确保在回发时重新添加控件,否则在运行FindControl()时,它将返回null。

尝试了此操作。不太管用。不,我没有其他控件,我总是清除controls属性,然后添加一个实现接口的控件。因此,基本上您总是以Panel.Controls[0]结束。那么,如果您使用上述控件,您会得到什么回报?我猜控制权不会在回邮中重新创建。Thanx,伙计,当我误导这些东西时,你不生气吗PNo担心-很高兴我能帮上忙:)我只是通过经验知道这一点,因为我以前做过完全相同的事情!我试过这个。不太管用。不,我没有其他控件,我总是清除controls属性,然后添加一个实现接口的控件。因此,基本上您总是以Panel.Controls[0]结束。那么,如果您使用上述控件,您会得到什么回报?我猜控制权不会在回邮中重新创建。Thanx,伙计,当我误导这些东西时,你不生气吗PNo担心-很高兴我能帮上忙:)我只是通过经验知道这一点,因为我以前做过完全相同的事情!