也许我在这里做了一个错误的假设,但这让我很难过。 我必须在同一控件中的两个不同位置设置两个相同的中继器。我想避免更改控件的名称,以便我可以在前端使用相同的功能(实际上,如果有更好的方法在两个不同的地方有两个相同的中继器,而不是直接复制和粘贴,那就是大)。但为简单起见,我按照以下方式分解了两个:
<asp:Repeater ID="rptTest" runat="server">
<ItemTemplate>
<asp:UpdatePanel runat="server" ID="updTestPanel">
<ContentTemplate>
<asp:TextBox ID="txtTest" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:TextBox ID="txtTest2" runat="server" />
</ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="rptTest2" runat="server">
<ItemTemplate>
<asp:UpdatePanel runat="server" ID="updTestPanel">
<ContentTemplate>
<asp:TextBox ID="txtTest" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:TextBox ID="txtTest2" runat="server" />
</ItemTemplate>
</asp:Repeater>
这是事情:txtTest2
在两个转发器中重复都很好,但txtTest
会引发以下错误:
错误4'txtTest'已在此类中声明为'Protected WithEvents txtTest As System.Web.UI.WebControls.TextBox'。
错误5'Private Overloads函数__BuildControltxtTest()As System.Web.UI.WebControls.TextBox'有多个具有相同签名的定义。
错误8'txtTest'已在此类中声明为'Protected WithEvents txtTest As System.Web.UI.WebControls.TextBox'。
有没有办法做我正在尝试做的事情,或者我是否需要重新考虑如何在转发器中调用异步数据?
答案 0 :(得分:0)
如果不了解您要做的事情,您所采用的方法将起作用 - 但您不能在页面上使用两个具有相同名称的控件。它们都在“页面”范围内,因此会抱怨。
我建议的是让转发器内的每个文本框的方法都不同,但让它们调用不同的方法。在这些方法中,您只需将texbox值传递给实际完成工作的集中方法即可。这样,您不必重复代码,您所做的就是制作两个不同的函数,这些函数是集中式方法的通道。
答案 1 :(得分:0)
如果您拥有DataBound
(Repeater
,DataList
,FormVeiw
等控件,并且在更新面板下,这些控件将具有页面级范围。你必须给他们唯一的ID,因为我不认为这个问题有另一种解决方法。 如果您发现这些控件在页面上可用,则不使用FindControl。