重复的中继器,相同的UpdatePanel

时间:2011-05-29 05:30:00

标签: asp.net updatepanel repeater

也许我在这里做了一个错误的假设,但这让我很难过。 我必须在同一控件中的两个不同位置设置两个相同的中继器。我想避免更改控件的名称,以便我可以在前端使用相同的功能(实际上,如果有更好的方法在两个不同的地方有两个相同的中继器,而不是直接复制和粘贴,那就是大)。但为简单起见,我按照以下方式分解了两个:

 <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'。

有没有办法做我正在尝试做的事情,或者我是否需要重新考虑如何在转发器中调用异步数据?

2 个答案:

答案 0 :(得分:0)

如果不了解您要做的事情,您所采用的方法将起作用 - 但您不能在页面上使用两个具有相同名称的控件。它们都在“页面”范围内,因此会抱怨。

我建议的是让转发器内的每个文本框的方法都不同,但让它们调用不同的方法。在这些方法中,您只需将texbox值传递给实际完成工作的集中方法即可。这样,您不必重复代码,您所做的就是制作两个不同的函数,这些函数是集中式方法的通道。

答案 1 :(得分:0)

如果您拥有DataBoundRepeaterDataListFormVeiw等控件,并且在更新面板下,这些控件将具有页面级范围。你必须给他们唯一的ID,因为我不认为这个问题有另一种解决方法。 如果您发现这些控件在页面上可用,则不使用FindControl。