0

我正在 c# asp.net 中编写一个复合控件作为实验,并希望我的复合控件的所有实例与一个外部控件交互。这可能吗?

我尝试过的事情:

选项1:从控件内部检查页面上是否存在外部控件,如果不存在则添加

选项 2:在设计时将目标控件的 id 传递给复合控件,然后使用 this.Page.FindControl()

显然,它会这么简单是一厢情愿:)

如果我尝试从 CreateChildControls 方法中执行此操作,this.Page.FindControl(target control) 始终返回 null。如果我尝试在此方法中将控件添加到页面,则会引发异常:

“在 DataBind、Init、Load、PreRender 或 Unload 阶段不能修改控件集合。”

是否有另一种方法/事件可以实现这一目标?

4

2 回答 2

0

为什么不在您的复合控件上公开它们的输出的公共属性,然后在呈现面板的内容时,通过页面递归,找到复合控件的所有实例,获取文本并将其添加到面板?

于 2012-02-26T16:16:34.037 回答
0

您可以通过实现 INamingContainer 接口在同一个 Web 表单上创建多个实例。这基本上有助于防止同一命名空间中的 id 冲突。

如果您想访问另一个控件,请在其上设置一个属性以公开您想要公开的数据。

构建复合控件

于 2012-02-26T15:51:28.300 回答