asp.net - 如何避免 asp:UpdatePanel 重复我的内容?
问题描述
我正在创建一个网页,该网页每 5 秒刷新一次以显示还剩多少订单。问题是刷新后,我的内容开始重复。在这里,我的问题简介:我正在展示:
Order Offline : 1 / Order Online : 0.
刷新后,它将是:
Order Offline : 11 / Order Online : 00.
我使用 withasp:UpdatePanel
Triggers
和asp:Timer
事件刷新页面
我试过用谷歌搜索答案,大多数情况下我通过设置ViewState
to找到了答案,Disabled
我也试图改变UpdateMode
为Conditional
这是我的代码片段:
<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.
没有重复的内容。
解决方案
让我们首先了解会发生什么:您的页面是在服务器上生成的,发送到浏览器,在那里显示它,然后,每次刷新时,服务器都会被请求,此时,a分别LiteralControl
添加到phTotalQueue
和phTotalQueueM
。每次运行时,已经存在于phTotalQueue
和中的控件phTotalQueueM
将分别保留在那里,显示旧值,但正在生成一个新的此类控件,显示旧值之外的新值。我想建议你确保你的 s 中有一个可识别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") & ""
或者,您可以从您的 s 中删除旧控件UpdatePanel
,或者找到它们并修改它们的Text
属性,但这些都是 hacky 方式,我建议使用可识别标签。