2009-10-13 2 views
2

Я обнаружил, что если вы нажмете F5 или обновите окно браузера, последнее событие снова заработает. Напр. Я нажал на кнопку, событие кнопки выполняется нормально, но если я нажму F5 из окна браузера, то снова произойдет одно и то же событие.Повторное нажатие кнопки мыши при обновлении страницы с использованием F5

У кого-нибудь есть идеи?

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

ответ

5

В соответствии с 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;} 
+0

любезно голосовать, когда и принять ответ – solairaja

1

Это не ошибка. Это по дизайну.

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

4

Если вы хотите, чтобы полностью очистить страницу после того, как постбэк, так что он не срабатывает снова, вы можете ответ. Перенаправление на ту же страницу.

Response.Redirect(Request.Url.AbsoluteUri); 

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

Кроме того, вы можете добавить метод расширения, чтобы ударить так быстро, как так:

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(); 
} 
Смежные вопросы