如何避免asp:UpdatePanel复制我的内容?

时间:2019-06-30 09:22:51

标签: asp.net vb.net webforms

我正在创建一个每5秒刷新一次的网页,以显示还剩多少订单。问题是刷新后,我的内容开始重复。 在这里,我的问题简介: 我正在显示: Order Offline : 1 / Order Online : 0. 刷新后,将是: Order Offline : 11 / Order Online : 00. 我使用asp:UpdatePanel Triggersasp:Timer事件刷新页面

我尝试使用Google搜索来寻找答案,大部分情况下都是通过将ViewState设置为Disabled来找到答案的,而且我还尝试将UpdateMode更改为Conditional < / p>

这是我的代码段:

<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" ID="ScriptManager1" />
        <asp:Timer ID="Timer1" runat="server" Interval="5000"></asp:Timer>
        <div class="row">
            <div class="col-sm-2">
                <asp:ImageButton ImageUrl="image.png" Width="170" ID="ClsBtn" runat="server" />
            </div>
            <div class="col-sm-4" style="text-align: right;">
                <span id="date" style="font-size:10px; font-weight: 900;"></span>
                <span id="time" style="font-size:10px; font-weight: 900;"></span>
            </div>
            <div class="col-sm-4" style="text-align: right;">
                <asp:UpdatePanel ID="upTQ" runat="server">
                    <Triggers><asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /></Triggers>
                    <ContentTemplate>
                        <span style="font-size: 15px; font-weight: 900;">OFFLINE : <asp:PlaceHolder runat="server" ID="phTotalQueue" /> / ONLINE : <asp:PlaceHolder runat="server" ID="phTotalQueueM" /></span>
                    </ContentTemplate>
                </asp:UpdatePanel>
            </div>

这是我背后的代码:

phTotalQueue.Controls.Add(New LiteralControl("" & dtTO.Rows(0).Item("TotalOrderOffline") & ""))
phTotalQueueM.Controls.Add(New LiteralControl("" & dtTO2.Rows(0).Item("TotalOrderOnline") & ""))

我希望输出为Order Offline : 1 / Order Online : 0.,没有重复的内容。

1 个答案:

答案 0 :(得分:1)

首先让我们了解会发生什么:您的页面是在服务器上生成的,发送到浏览器,显示在页面上,然后每次刷新服务器时都请求该页面,此时,{{1} }分别添加到LiteralControlphTotalQueue中。每次运行时,phTotalQueueMphTotalQueue中已经存在的控件将分别保留在其中,显示较旧的值,但是正在生成一个新的此类控件,除较旧的值外,还将显示新的值。我谨建议您确保您的phTotalQueueM中有一个可识别的LiteralControl,并有一个UpdatePanel

ID

现在,由于您具有可识别的 <asp:UpdatePanel ID="upTQ" runat="server"> <Triggers><asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /></Triggers> <ContentTemplate> <span style="font-size: 15px; font-weight: 900;">OFFLINE : <asp:PlaceHolder runat="server" ID="phTotalQueue"><asp:Literal ID="phTotalQueueText" runat="server"></asp:Literal> </asp:PlaceHolder> / ONLINE : <asp:PlaceHolder runat="server" ID="phTotalQueueM"><asp:Literal ID="phTotalQueueMText" runat="server"></asp:Literal></asp:PlaceHolder></span> </ContentTemplate> </asp:UpdatePanel> 实例,我们来更改后面的代码:

LiteralControl

phTotalQueueText.Text = "" & dtTO.Rows(0).Item("TotalOrderOffline") & ""

或者,您可以从phTotalQueueMText.Text = "" & dtTO2.Rows(0).Item("TotalOrderOnline") & "" 中删除旧控件,也可以找到它们并修改其UpdatePanel属性,但是这些方法很怪异,我建议使用可识别的标签。