У меня есть приложение vb.net, и в приложении есть функция для отправки отчета.
Когда пользователь ответил на все вопросы отчета, он нажимает кнопку «Отправить» и отображается страница, на которой отображается форма, требующая от него ввести пароль - после того, как он ввел пароль (дважды). Поле «Пароль» и поле «Подтверждение пароля»), они нажимают кнопку «Продолжить» и переходят на страницу с сообщением «Отчет отправлен» и номером дела для отчета, который они отправили. На этом этапе отчет представляется, а информация записывается в базу данных.
Пользователь может использовать предоставленный ему номер дела и пароль, которые он создает, чтобы снова войти в систему, чтобы проверить наличие обратной связи, добавленной работодателем в его отчет.
Однако существует проблема, заключающаяся в том, что если пользователь заполняет отчет и нажимает кнопку «Отправить», если он нажимает кнопку «Назад» в браузере, или перемещается назад по странице другим способом, когда он просматривает Страница «Введите пароль», они возвращаются на страницу, на которой они заполнили отчет, и все их ранее введенные значения все еще отображаются там.
Если затем они снова нажимают кнопку «Отправить» (может быть, они изменили некоторые ранее введенные данные, а может и нет), то создается второй отчет, и информация записывается в базу данных во второй раз, так что это может привести к дублированию записей. .
Я хочу попытаться предотвратить переход пользователя на предыдущую страницу на этом двухэтапном этапе отправки отчета.
Я наткнулся на этот ответ по SO и попытался реализовать его в своем проекте.
Однако, когда я теперь нажимаю «Отправить», чтобы отправить отчет после завершения, в консоли браузера отображается сообщение об ошибке:
Uncaught ReferenceError: changeHashOnLoad не определяется при загрузке (подтверждение пароля: 118)
Я добавил функцию и вызов функции в passwordconfirm.aspx:
<head runat="server">
...
<script>
$(document).ready(function () {
...
function changeHashOnLoad() {
console.log("changeHashOnLoad() called ");
window.location.href += "#";
setTimeout("changeHashAgain()", "50");
}
function changeHashAgain() {
window.location.href += "1";
}
var storedHash = window.location.hash;
window.setInterval(function() {
if (window.location.hash != storedHash) {
window.location.hash = storedHash;
}
}, 50);
...
});
</script>
</head>
<body onload="changeHashOnLoad(); ">
...
</body>
Но я не уверен, почему я получаю Uncaught ReferenceError
с указанием changeHashOnLoad is not defined
при отправке отчета, и страница подтверждения отправки загружается ...
Это потому, что свойство onload
тега HTML запускается перед кодом внутри тегов <script></script>
раздела HTML <head></head>
? Если это так, как я могу убедиться, что функция changeHashOnLoad()
уже определена к моменту загрузки страницы - где мне определять эту функцию?
Или, если нет, что я здесь не так делаю?