Logan Risen Ответов: 2

Код перезагружается при тиканье таймера


Привет, у меня есть таймер, который правильно тикает внутри и обновляет панель. По какой-то причине он снова вызывает Page_Load? Единственное, что находится внутри панели обновления, - это менеджер сценариев и таймер.

<pre> <asp:UpdatePanel runat="server" ID="upTimer">
                    <ContentTemplate>
                        <asp:scriptmanager runat="server" EnableCdn="True" LoadScriptsBeforeUI="False"></asp:scriptmanager>
<asp:timer runat="server" ID="MainTimer" Enabled="False" Interval="1000" OnTick="MainTimer_Tick"></asp:timer>
     </ContentTemplate>
</asp:UpdatePanel>


Я понятия не имею, почему это происходит. Код полностью обновляется. Он генерирует случайную строку в методе, а затем запускает таймер. Таймер берет строку и помещает ее на метку, метод не находится в таймере и не вызывается снова. Код для случайной строки находится в Page_Load. Пожалуйста, помогите мне, если это возможно!

EDIT: выяснил, что страница все еще перезагружается, хотя она находится в панели обновления, теперь в любом случае я могу это остановить?

Что я уже пробовал:

Всё. Я серьезно не знаю, что делать. Я обыскал все вокруг и не смог найти никого другого с этой проблемой.

2 Ответов

Рейтинг:
9

Logan Risen

Я проверил, так ли это.

ScriptManager1.IsInAsyncPostBack
и если бы это было так, я бы восстановил переменные, которые я сохранил в базе данных.


Рейтинг:
1

F-ES Sitecore

Именно так работают updatepanels\asynch work...it постройте всю страницу (т. е. вызовите page_load и т. д.), а затем определите, какие биты нужно отправить обратно в браузер. Он построен для его простоты использования, а не для его эффективности.

Все, что вам нужно сделать, это перестроить свой код так, чтобы он работал. Поместите код который выполняет эту работу в функцию а затем вызовите эту функцию в Page_Load только если это не обратная передача;

if (!Page.IsPostback)
{
    DoWork();
}


Сейчас также вызывать dowork в вашем случае MainTimer_Tick. Это гарантирует, что код запускается при первой загрузке страницы, а затем каждый раз, когда срабатывает таймер.


Logan Risen

Лучше проверить, отправляет ли менеджер сценариев сообщение обратно, отличное от обычного выданного сообщения обратно пользователем, чтобы все могло перезапуститься в случае необходимости. Кроме того, я не вызываю метод, код находится непосредственно внутри Page_Load, потому что я хотел, чтобы он был вызван один раз.