2

我正在尝试编写一个通用函数来搜索给定父级中的所有表单输入控件,以便以后可以重新填充表单的值。

我将每个控件的IDVALUE存储在一个 cookie 中,并FindControl(ID)在设置其 VALUE 之前通过使用来定位控件来重新填充控件。

一切正常,除非我有多个用户控件实例,其中有子控件。

例如,一个 DateRange 控件定义了两个文本框...

<asp:TextBox ID="txtDateFrom"  />
<asp:TextBox ID="txtDateTo"  />

然后在我的表单中,如果我有两个 DateRange 控件...

<my:daterange id="DateRangeA" />
<my:daterange id="DateRangeB" />

...我现在有2 个文本框,其 ID 均为txtDateFrom(和 2x txtDateTo),因此我无法将这两个值都存储在 cookie 中(因为它们的 ID 不是唯一的),也无法再次使用FindControl().

我想要的是类似于的东西FindControl(ID),但使用 CLIENTID 代替,以便我可以区分不同用户控件中具有相同 ID 的子控件。

我反对必须手动存储所有控件的完整路径(以某种方式),然后使用FindControl(IDa).FindControl(IDb).FindControl(IDc)...(或其他)深入到子控件的想法。

一定有更简单的方法吧?

还是我接近这一切都错了?建议赞赏,谢谢。

4

1 回答 1

2

使您的控件实现INamingContainer 接口

根据这篇文章 :

任何实现此接口的控件都会创建一个新的命名空间,其中所有子控件 ID 属性都保证在整个应用程序中是唯一的。

另外,请查看这篇文章

于 2013-10-14T03:43:16.110 回答