如何在c#.net中通过ClientID查找控件?

时间:2013-10-14 02:47:14

标签: c# asp.net findcontrol clientid

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

我将每个控件的 ID VALUE 存储在Cookie中,并在设置其值之前使用FindControl(ID)重新定位控件以找到控件。< / p>

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

例如,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)...(或其他)深入查看子控件。

必须有一个更简单的方法,对吧?

或者我接近这一切都错了?建议表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:2)

让您的控件实现INamingContainer interface

根据文章:

  

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

另外,请检查此article