Запрет обновления страницы при нажатии F5 - PullRequest
4 голосов
/ 19 ноября 2010

Я создал форму с помощью элемента управления на стороне сервера, как кнопку .. и также написал событие для этого .. Теперь время выполнения после нажатия на кнопку, я обновил страницу, нажав F5.Page_load выполняется нормально, но событие button1_click ()стрельба ... Так как я могу остановить выполнение этого события в этом сценарии. Пожалуйста, предложите мне

Ответы [ 9 ]

11 голосов
/ 19 ноября 2010

Краткий ответ: невозможно

Более длинный ответ: Ни один веб-сайт не может блокировать функциональность браузера, поскольку это может стать серьезной проблемой безопасности для браузера.

6 голосов
/ 19 ноября 2010

Добро пожаловать в веб-разработку, нет способа остановить обновление и повторное размещение страницы, это полностью поведение браузера.

Хотя есть обходные пути;Одна простая вещь, которую вы можете сделать, это после обработки нажатия кнопки, вы можете перенаправить браузер назад на страницу, чтобы обновление не включало повторное нажатие кнопки.Очевидно, что для этого может потребоваться другая система управления состоянием (а не view-state), возможно, вы можете сохранить свое состояние в сеансе.

2 голосов
/ 03 октября 2012
 <script type="text/javascript" language="javascript">
    function checkKeyCode(evt)// for F5 disable
    {

        var evt = (evt) ? evt : ((event) ? event : null);
        var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
        if (event.keyCode == 116)//disable F5
        {
            evt.keyCode = 0;
            return false
        }
        if (event.keyCode == 123) {
            evt.keyCode = 0;
            return false
        }
        if (event.keyCode == 93) {
            evt.keyCode = 0;
            return false
        }
        if (event.altKey == true && event.keyCode == 115) //disable alt-F4
        {
            evt.keyCode = 0;
            return false
        }



        //alert(event.keyCode);
    }

    document.onkeydown = checkKeyCode;

</script>

Разместите этот скрипт на главной странице или там, где вы хотите заблокировать кнопку F5.

2 голосов
/ 19 ноября 2010

Постер использует ASP.NET WebForms.В MVC, используя шаблон Post-Redirect-Get, это не было бы проблемой.

Но это решалось для Webforms с 2004 года (и даже до этого - я написал простое решение для заявок в 2001 году)эта статья: http://msdn.microsoft.com/en-us/library/ms379557.aspx

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

2 голосов
/ 19 ноября 2010

Вы можете использовать:

window.onbeforeunload = function ()
{
    return false;
}

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

1 голос
/ 19 ноября 2010

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

1 голос
/ 19 ноября 2010

Это не совсем обновление страницы, которое вы хотите заблокировать, его страница повторно POST.

Как уже было сказано, на стороне клиента это невозможно, потому что обновление будет воспроизводить то, что браузер сделал в последнем действии.

Но вы можете перехватить его на стороне сервера, потому что сервер можетдержите некоторую информацию для контроля над запросом.

Самый простой способ - поместить RequestID в скрытое поле на Page Load, сохранить его где-нибудь, как в Session.И управляйте его значением в следующем POST, чтобы подтвердить запрос, затем переопределите его, чтобы избежать повторного POST с тем же RequestID .

Возможно, есть лучший способ:)

Ваша 'проблема' похожа на ужас ужаса двойного щелчка пользователя: Проблема двойного щелчка ASP.Net

0 голосов
/ 31 мая 2014

У меня есть код, который не позволяет вам нажимать F5 и / или Ctrl + R:

<!DOCTYPE html>
<html>
<head>
<title>
Key code test!
</title>
<script type="text/javascript">
var x, ctrlKeyPressed = false;  
function keyDown(e){            
x = e.charCode || e.keyCode;
document.getElementById("key").innerHTML = x;
if(x == 17) {
ctrlKeyPressed = true;
}
if(ctrlKeyPressed && x == 82) {
e.preventDefault();
} else if(x == 116) {
e.preventDefault();
}
}
function keyUp(e) {
x = e.charCode || e.keyCode;
if(x == 17) {
ctrlKeyPressed = false;
}
}
window.onload = function () {
document.onkeydown = function (e) {
keyDown(e);
};
document.onkeyup = function (e) {
keyUp(e);
};
}
</script>
</head>
<body>
Press a key!
<br/>
Key code: <div style="display:inline;" id="key">Nothing</div>
</body>
</html>
0 голосов
/ 19 октября 2012

Единственное решение проблемы обновления F5 - Response.Redirect. Пожалуйста, смотрите мой пост на эту тему.

https://stackoverflow.com/questions/12596152/asp-net-f5-browser-refresh-duplicate-record/12596153#12596153

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