asp.net webforms - 复合控件与页面控件交互

时间:2012-02-26 15:22:19

标签: asp.net composite-controls

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

我尝试过的事情:

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

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

显然,这是一厢情愿的想法会那么简单:)

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

“在DataBind,Init,Load,PreRender或Unload阶段无法修改控件集合。”

还有另一种方法/事件,我可以实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

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

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

Build Composite Controls

答案 1 :(得分:0)

为什么不在Composite Control上公开它们的输出公共属性,然后在渲染Panel的内容时,通过页面递归,找到复合控件的所有实例,获取文本,然后将其添加到小组?