【问题标题】:Duplicate repeaters, identical UpdatePanels重复的中继器,相同的更新面板
【发布时间】:2011-05-29 05:30:00
【问题描述】:

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

 <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 Function __BuildControltxtTest() As System.Web.UI.WebControls.TextBox' 有多个具有相同签名的定义。

错误 8 'txtTest' 已在此类中声明为 'Protected WithEvents txtTest As System.Web.UI.WebControls.TextBox'。

有没有办法做我想做的事,还是我需要重新考虑如何在中继器中调用异步数据?

【问题讨论】:

    标签: asp.net updatepanel repeater


    【解决方案1】:

    如果不知道您要做什么,您所采用的方法将会奏效 - 但您不能在页面上拥有两个具有相同名称的控件。它们都在“页面”范围内,因此会抱怨。

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

    【讨论】:

    • 我想我不清楚的是,对于控制 txtTest2,范围似乎是转发器,但对于 txtTest,它回到页面级别,即使它在转发器内 - 也在转发器内一个更新面板。是什么 UpdatePanels 使控件范围内返回到页面级别?
    • updatepanels 最终被浏览器解释为“div”,它所做的一切都是通过名称识别该 div,因此 DOM 可以重绘它。对于中继器,我“相信”是相同的(由 div 标识),因此一旦输出,就没有真正的“范围”将它们分开......
    • Updatepanels 也有不同的方式来引用其中的字段,因为 DOM 需要引用它......你在 txtTest2 字段上没有收到错误吗?
    【解决方案2】:

    如果您在更新面板下拥有DataBoundRepeaterDataListFormVeiw 等)控件,则这些控件将具有页面级范围。您必须为他们提供唯一的 ID,因为我认为没有其他解决方法可以解决此问题。 如果您发现这些控件在页面上可用,而无需使用 FindControl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多