Как избежать asp: UpdatePanel дублировать мое содержимое? - PullRequest
1 голос
/ 30 июня 2019

Я создаю веб-страницу, которая обновляется каждые 5 секунд, чтобы показать, сколько осталось заказов. Проблема в том, что после обновления мое содержимое начинает дублироваться. Вот краткое изложение моих проблем: Я показываю: Order Offline : 1 / Order Online : 0. После обновления это будет: Order Offline : 11 / Order Online : 00. Я обновляю страницу с asp:UpdatePanel Triggers и asp:Timer event

Я попытался поискать в поиске ответа, и в основном я нашел ответы, установив 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. без дублированного содержимого.

1 Ответ

1 голос
/ 30 июня 2019

Давайте сначала разберемся, что происходит: ваша страница генерируется на сервере, отправляется в браузер, где она отображается, а затем при каждом обновлении запрашивается сервер, и в это время 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 s или найти их и изменить их атрибут Text, но это ненадежные способы, и я рекомендую использовать идентифицируемые теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...