我正在创建一个每5秒刷新一次的网页,以显示还剩多少订单。问题是刷新后,我的内容开始重复。
在这里,我的问题简介:
我正在显示:
Order Offline : 1 / Order Online : 0.
刷新后,将是:
Order Offline : 11 / Order Online : 00.
我使用asp:UpdatePanel
Triggers
和asp: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.
,没有重复的内容。
答案 0 :(得分:1)
首先让我们了解会发生什么:您的页面是在服务器上生成的,发送到浏览器,显示在页面上,然后每次刷新服务器时都请求该页面,此时,{{1} }分别添加到LiteralControl
和phTotalQueue
中。每次运行时,phTotalQueueM
和phTotalQueue
中已经存在的控件将分别保留在其中,显示较旧的值,但是正在生成一个新的此类控件,除较旧的值外,还将显示新的值。我谨建议您确保您的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
属性,但是这些方法很怪异,我建议使用可识别的标签。