2012-02-26 52 views
0

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

事情我已经尝试:

选项1:是否在网页上不存在外部控制的控制范围内的检查,如果它不

选项2添加:有目标控件的ID通过在设计时复合控件,然后使用this.Page.FindControl()

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

如果我尝试从CreateChildControls方法中做到这一点, this.P age.FindControl(目标控件)总是返回null。如果我尝试从该方法内将控件添加到页面,则会引发异常:

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

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

+0

你的意思是“让我的复合控件的所有实例与一个外部控件交互”?另外,不要像这样在单独的控件之间创建依赖关系 - 通过控件属性从页面访问它们。 – IrishChieftain 2012-02-26 15:32:52

+0

我基本上想要能够将我的复合控件的一些实例添加到页面,然后将它们全部输出到同一个面板,而不是为每个复合控件添加面板。 – Evert 2012-02-26 15:38:48

+0

所以你使用复合控件来包含其他控件?只是好奇,如果你真的需要复合材料?你的复合控制是做什么的? – IrishChieftain 2012-02-26 15:49:28

回答

0

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

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

Build Composite Controls

0

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