Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#net中通过ClientID找到控件?_C#_Asp.net_Findcontrol_Clientid - Fatal编程技术网

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

如何在c#net中通过ClientID找到控件?,c#,asp.net,findcontrol,clientid,C#,Asp.net,Findcontrol,Clientid,我正在尝试编写一个通用函数,它将搜索给定父级中的所有表单输入控件,以便稍后重新填充表单的值 我将每个控件的ID和值存储在cookie中,并通过使用FindControl(ID)在设置控件值之前定位控件来重新填充控件 除了我有一个usercontrol的多个实例(其中有子控件)之外,所有这些都可以正常工作 例如,DateRange控件定义了两个文本框 <asp:TextBox ID="txtDateFrom" /> <asp:TextBox ID="txtDateTo" /&

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

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

除了我有一个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,这样我就可以区分不同usercontrols中具有相同ID的子控件

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

一定有更简单的方法吧


还是我的做法完全错了?感谢您的建议。

让您的控件实现

文章说,

实现此接口的任何控件都会在 所有子控件ID属性都保证是唯一的 在整个应用程序中


另外,请检查此项。

Hmm。好的,我试过了,虽然呈现给HTML元素的ID现在确实是唯一的,但代码后面可访问的ID没有改变。谢谢你的建议。同时,我选择了一种(黑客)解决方法,并通过
PARENTID+“>”+ID
存储每个控件,无论它是否需要它。因此,以下内容足以一致地定位我可能使用的任何控件:
FindControl(PARENTID)。FindControl(ID)