我有疑问,为什么单独的转发器中的2个控件如果在更新面板中,则不能具有相同的ID,但如果它们不在更新面板中,则它们可以共享相同的ID。看到这段代码......
<asp:Repeater ID="rptFirstRepeater" runat="server">
<ItemTemplate>
<asp:Image runat="server" ID="imgThisWorks" />
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Image runat="server" ID="imgThisDoesntWork" />
</ContentTemplate>
</asp:UpdatePanel>
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="rptSecondRepeater" runat="server">
<ItemTemplate>
<asp:Image runat="server" ID="imgThisWorks" />
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Image runat="server" ID="imgThisDoesntWork" />
</ContentTemplate>
</asp:UpdatePanel>
</ItemTemplate>
</asp:Repeater>
生成此错误:
CS0102: The type 'ASP._8_admin_testemail_aspx' already contains a definition for 'imgThisDoesntWork'
但如果您不使用更新面板,它可以正常工作。
<asp:Repeater ID="rptFirstRepeater" runat="server">
<ItemTemplate>
<asp:Image runat="server" ID="imgThisWorks" />
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="rptSecondRepeater" runat="server">
<ItemTemplate>
<asp:Image runat="server" ID="imgThisWorks" />
</ItemTemplate>
</asp:Repeater>
据我所知,转发器中的所有控件都被赋予了新的ID ... ctl00_cttBody_ucTestControl_rptFirstRepeater_ctl00_imgThisWorks
这是否也不适用于更新面板? 我是否可以使用相同的ID使上面的代码工作? - 请忽略这两个中继器真的应该是一个中继器的事实! :)
谢谢,查尔斯。
答案 0 :(得分:2)
这似乎是一个已知的错误,微软决定不解决:
目前,我们已决定不解决这个具体问题。 幸运的是,有一个非常简单的解决方法 - 避免使用相同的方法 UpdatePanel内外的控件ID。