Я создаю веб-страницу, которая обновляется каждые 5 секунд, чтобы показать, сколько осталось заказов. Проблема в том, что после обновления мое содержимое начинает дублироваться.
Вот краткое изложение моих проблем:
Я показываю:
Order Offline : 1 / Order Online : 0.
После обновления будет:
Order Offline : 11 / Order Online : 00.
Я обновляю страницу с событием asp:UpdatePanelTriggers и asp:Timer
Я попытался найти ответ в Google, и в основном я нашел ответы, установив ViewState на 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. без повторяющегося содержимого.





Давайте сначала разберемся, что происходит: ваша страница создается на сервере, отправляется в браузер, где она отображается, а затем, каждый раз, когда она обновляется, запрашивается сервер, и в это время к 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 или найти их и изменить их атрибут Text, но это хакерские способы, и я рекомендую использовать идентифицируемые теги.
Я пробовал это, это работает как шарм !! Вы спасли мне жизнь, а также мое время. Большое спасибо @Lajos Arpad. Также я изменил ID
asp:PlaceHolderи Вуаля !! ОНО РАБОТАЕТ :) :)