1

私はこのコードを持っています:

Control ctrl = Page.LoadControl("~/UserControls/ReportControl.ascx");
IReport rpt = (IReport)ctrl;
rpt.LoadData();
Panel.Controls.Add(ctrl);

これまでのところ、すべてが期待どおりに機能しています。ロードされたコントロールを取得し、インターフェイスにキャストしてメソッドを使用するには、クリック ポストバック イベントが必要でButton、これを試しました。

if (Panel.Controls.Count > 0) {
   Control ctrl = Panel.Controls[0] as Control;
   IReport rpt = ctrl as IReport;
   string result = rpt.AMethodToInvoke();
}

このキャストは発生せず、パネルから取得したコントロールはLiteralContol.

何か案は?ありがとうございました。

4

1 に答える 1

1

パネルに他のコントロールがありますか?

多分あなたのコントロールに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 が返されます。

于 2012-05-10T09:42:13.587 に答える