不可预知的“找到了具有相同ID的多个控件'ctl35'。”动态添加控件时

时间:2012-07-16 23:32:14

标签: c# asp.net updatepanel

我知道这个问题已经出现了无数次,但我找不到的帖子都没能帮我解决这个问题。

每隔一段时间,我就会收到标题中的错误:Multiple controls with the same ID 'ctl35' were found. FindControl requires that controls have unique IDs.这肯定不会一直发生,似乎只需刷新几次就会导致错误消失。

我的页面基本上有一个UpdatePanel,用户可以在其中输入与订单部分相对应的数据。由于可以有多个部分,因此有一个按钮可以创建新的Panel,创建输入字段并将其添加到Panel,然后将其添加到UpdatePanel。用户可以多次单击此按钮以添加多个条目Panel。为了实现这一点,我保留了List<Panel>,每当用户想要一个新的输入字段时,我就会添加新的Panel。当页面收到回发时(从添加按钮),然后我遍历列表并将每个Panel重新添加到UpdatePanelctl35设法保留现有的条目面板。

由于这些字段是动态更新的,因此我确保将我将要检索数据的字段的ID设置为唯一且可彼此区分的字段。但是,如上所述,我偶尔会遇到有关使用ASP.NET自动生成的ID(在本例中为ctl35)查找多个控件的问题。在收到此错误后,查看Chrome中呈现的HTML,根本没有将{{1}}作为其ID的控件。此外,渲染的HTML中没有一个甚至包含其ID以自动生成的“ctlXX”结尾的任何元素。因此,我无法理解可能存在可能的命名冲突问题的位置。这个错误在大多数情况下不会发生的事实也是这里混淆的主要原因。

有关此问题可能是什么的任何想法,或者我可能需要做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

确保您为所有动态创建的控件分配ID,而不仅仅是您需要从中获取数据的控件。我已经看到在添加的控件上使用默认ID时会发生这种情况。