ASP.NET/AJAX - Таймер не работает правильно - PullRequest
1 голос
/ 22 апреля 2010

Я пытаюсь создать веб-приложение, где вы видите таймер обратного отсчета Ajax. Всякий раз, когда я нажимаю кнопку, обратный отсчет должен возвращаться к 30 и продолжать обратный отсчет.

Теперь проблема заключается в том, что всякий раз, когда я нажимаю кнопку, таймер продолжает обратный отсчет в течение секунды или 2, и большую часть времени после этого таймер продолжает стоять на 30 дольше.

Код WebForm:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Label ID="Label1" runat="server" Text="geen verbinding"></asp:Label>
        <br />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
</asp:UpdatePanel>
<asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick">
</asp:Timer>

</form>

Код сзади:

static int timer = 30;
protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = timer.ToString();
}
protected void Timer1_Tick(object sender, EventArgs e)
{
    timer--;

}
protected void Button1_Click(object sender, EventArgs e)
{
    timer = 30;         
}

Надеюсь, кто-то знает, в чем проблема, и если есть что-то, чтобы это исправить.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 05 января 2011

, поскольку таймер обрабатывает страницу асинхронно, а событие нажатия кнопки занимает время для обработки на сервере, событие таймера все еще запускается между событием нажатия кнопки, и, следовательно, таймер продолжает обратный отсчет в течение секунды или двух. Используйте Java-скрипт, чтобы установить метку 30 на стороне клиента, как только будет нажата кнопка сброса. После события щелчка по таймеру уменьшите значение метки (не таймера) и присвойте метке новое значение. Нет необходимости для переменной int таймера. Также при загрузке страницы присваивайте значение метки, только если страница не является обратной передачей (т.е. IsPostback имеет значение false), поскольку мы хотим загружать значение метки только при первом отображении страницы. В остальное время событие щелчка по таймеру назначит значение.

0 голосов
/ 20 мая 2011

Проблема заключалась в том, что Visual Studio размещал его на локальном хосте.Если вы используете ip-адрес 127.0.0.1 вместо локального хоста в URL-адресе, он работает быстро.Я думаю, это не будет проблемой на более быстрых машинах, к сожалению, у меня их не было в то время.

РЕДАКТИРОВАТЬ: Добавление награды за этот вопрос было ошибкой, извините за это.

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