Как установить таймер в asp.net

У меня есть страница, на которой, когда какая-то операция идет не так, я хочу запустить таймер, подождать 30 секунд, остановить таймер и повторить операцию. Каждый раз, когда запускается таймер, мне нужно сообщить об этом пользователю, изменив текст некоторой метки.

Как мне это сделать?

Вы можете разместить код? Таймер - это таймер javascript?

M4N 03.01.2009 18:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
9 246
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

со стороны клиента для принудительной обратной передачи вы можете напрямую вызвать метод __doPostBack

Он принимает два аргумента: EVENTTARGET и EVENTARGUMENT; поскольку вы выполняете этот вызов вне обычного цикла asp.net, вам нужно будет проверить IsPostBack в событии загрузки страницы (или init, на ваш выбор) - если это обратная передача, вам нужно будет посмотреть на эти два аргумента, которые свернуты вверх как элементы формы (Request.Form ["__ EVENTTARGET"]). Проверьте их значение, чтобы узнать, исходила ли обратная передача от вашего звонка или от одного из других элементов управления, если их значение совпадает с тем, что вы передаете со стороны клиента, затем внесите изменения в тест метки

Ответ принят как подходящий

Если я правильно понимаю, я думаю, вам следует вместо этого использовать таймер на стороне клиента (javascript). Для этого нельзя использовать таймер на стороне сервера.

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

Например. поместите на свою страницу следующий код таймера:

  <script>
    function StartTimer()
    {
      setTimeout('DoPostBack()', 30000); // call DoPostBack in 30 seconds
    }
    function DoPostBack()
    {
      __doPostBack(); // invoke the postback
    }
  </script>

В случае возникновения ошибки вы должны убедиться, что таймер на стороне клиента будет запущен:

if (error.Code == tooManyClientsErrorCode)
{
  // add some javascript that will call StartTimer() on the client
  ClientScript.RegisterClientScriptBlock(this.GetType(), "timer", "StartTimer();", true);
  //...
}

Надеюсь, это поможет (код не тестировался, поскольку сейчас у меня нет визуальной студии).

Обновлять:

Чтобы "имитировать" нажатие кнопки, вы должны передать идентификатор клиента кнопки методу __doPostBack (), например:

function DoPostBack()
{
  var buttonClientId = '<%= myButton.ClientID %>';
  __doPostBack(buttonClientId, ''); // simulate a button click
}

О некоторых других возможностях см. Следующий вопрос / ответ:

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

agnieszka 03.01.2009 19:54

хорошо, то, что вы написали, может быть полезно для меня, но вместо того, чтобы вызывать обратную передачу через 30 секунд, можно ли как-то щелкнуть кнопку на странице из кода javascript, как будто она была нажата пользователем?

agnieszka 03.01.2009 20:22

Два способа сделать это. Первый способ немного лучше, если вам нужно вызвать другие функции в том же потоке. Добавьте ScriptManager и Timer на страницу aspx, вы можете удалить их из панели инструментов или просто ввести код. ScriptManager должен быть объявлен перед asp: Timer. OnTick срабатывает после каждого интервала.

    <asp:ScriptManager ID = "ScriptManager1" runat = "server">
    </asp:ScriptManager>
    <asp:Timer ID = "Timer1" runat = "server" Interval = "4000" OnTick = "Timer1_Tick">
    </asp:Timer>

В коде позади (в данном случае C#):

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("tick tock");
    }

Второй способ не так хорош, если вам нужно, чтобы функции запускались в одном потоке. Вы можете установить таймер в ASP.net с помощью C#, следующий код запускает функцию каждые 2 секунды. В коде файла (.cs):

    // timer variable
    private static System.Timers.Timer aTimer;

    protected void Page_Load(object sender, EventArgs e)
    {
        // Create a timer and set a two second interval.
        aTimer = new System.Timers.Timer();
        aTimer.Interval = 2000;

        // Hook up the Elapsed event for the timer. 
        aTimer.Elapsed += OnTimedEvent;

        // Have the timer fire repeated events (true is the default)
        aTimer.AutoReset = true;

        // Start the timer
        aTimer.Enabled = true;
    }

Затем сделайте функцию, которую вы хотите вызвать, в этом формате:

//Doesn't need to be static if calling other non static functions

    private static void OnTimedEvent(Object source, System.Timers.ElapsedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
    }

Пример вывода:

Output

Другие вопросы по теме