【问题标题】:How to find a control by ClientID in c# .net?如何在 c# .net 中通过 ClientID 查找控件?
【发布时间】:2023-03-17 02:23:01
【问题描述】:

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

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

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

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

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

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

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

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

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

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

一定有更简单的方法吧?

或者我处理这一切都错了?感谢您的建议,谢谢。

【问题讨论】:

    标签: c# asp.net findcontrol clientid


    【解决方案1】:

    让你的控件实现INamingContainer interface

    根据文章:

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

    另外,请查看article

    【讨论】:

    • 嗯。好的,所以我尝试了,虽然呈现给 HTML 元素的 ID 现在确实是唯一的,但代码隐藏可访问的 ID 并没有改变。谢谢你的建议。与此同时,我选择了一种(hacky)解决方法,并通过PARENTID+"&gt;"+ID 存储每个控件,无论它是否需要它。因此,以下内容足以一致地定位我可能使用的任何控件:FindControl(PARENTID).FindControl(ID)
    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 2012-07-12
    • 2010-12-05
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    相关资源
    最近更新 更多