Событие нажатия кнопки вызывается снова при обновлении страницы с помощью F5

Я обнаружил, что если вы нажмете F5 или обновите из окна браузера, последнее событие будет запущено снова. Например Я нажал на кнопку, событие кнопки выполняется нормально, но если я нажимаю F5 из окна браузера, то это же событие снова запускается.

Может ли кто-нибудь иметь какие-либо идеи?

Спасибо, что поделились своим ценным временем.

13.10.2009 07:59:24
3 ОТВЕТА
РЕШЕНИЕ

Согласно NinenthSense, именно так реагирует браузер, когда пользователь обновляет страницу.

Если вы все еще хотите ограничить, вы можете пойти на некоторый JavaScript, как показано ниже

//to avaoid pressing F5 key

document.onkeydown = function()
 {
          if(event.keyCode==116) {
          event.keyCode=0;
          event.returnValue = false;
          }
}

//to avoid refresh, using context menu of the browser

document.oncontextmenu = function() {event.returnValue = false;}
5
13.10.2009 08:15:23

Это не ошибка. Это по замыслу.

Когда вы нажимаете F5 / Обновить, он снова отправляет тот же запрос на сервер.

1
13.10.2009 08:07:04

Если вы хотите полностью очистить страницу после возникновения обратной передачи, чтобы она не сработала снова, вы можете Response.Redirect на ту же страницу.

Response.Redirect(Request.Url.AbsoluteUri);

Это в основном берет всю строку запроса и отправляет обратно браузер, удаляя все сообщения в процессе. Я часто делаю это после подпрограммы Save (), чтобы вернуть страницу в «нормальное» состояние. Это также хорошо работает, если ваша подпрограмма Save обновляет базу данных, и у вас есть некоторые элементы пользовательского интерфейса на странице, которые читают из базы данных, тогда вам не нужно беспокоиться о перезагрузке этих элементов со свежими данными.

Кроме того, вы можете добавить метод Extension, чтобы поразить это быстро, вот так:

public static class Extensions
{
    public static void Reload(this Page page)
    {
        page.Response.Redirect(page.Request.Url.AbsoluteUri);
    }
}

Затем вы вызываете этот метод в своем коде так:

private void SaveCrap() 
{
    SavemeBlahBlah(); // save to dbase
    this.Page.Reload(); 
}
4
24.02.2011 17:57:23