Чтобы снова отобразить веб-страницу, Internet Explorer необходимо повторно отправить
в моем ASP.NET страница WebForms у меня есть модальное окно, которое появляется. Код javascript для отображения этого модального окна выглядит следующим образом:
function OpenMailAddressWin(subscriberContactRelationGid, routeId, btn) {
window.showModalDialog("SubscriberSecondaryAddress.aspx" + BuildQueryStringValuesForSubscriber(subscriberContactRelationGid, routeId, returntxtReceiptDate().value), this, strWindowFeatures + ";scroll:no;dialogWidth:442px;dialogHeight:350px");
location.reload(true);
}
после закрытия модального окна мне нужно обновить родительскую страницу(отсюда и местоположение.reload (true); оператор в конце) для того, чтобы изменения, сделанные в модальном окне, повлияли.
теперь дело в том, что иногда (не каждый раз, раздражающе), когда я закрываю это модальное окно, я получаю всплывающее предупреждение который говорит:
" чтобы снова отобразить веб-страницу, Internet Explorer должен повторно отправить информацию, которую вы недавно отправили.
Если вы делали покупку, вы должны нажать кнопку Отмена, чтобы избежать дублирования транзакции. В противном случае Нажмите кнопку Повторить, чтобы снова отобразить веб-страницу."
любые идеи, почему это происходит?
4 ответов
это проблема двойной отправки в браузерах.
когда страница загружается с помощью POST request и вы пытаетесь перезагрузить страницу с помощью location.reload(true);
, браузер должен отправить еще один запрос POST на сервер, и это может вызвать проблемы, поскольку POST должен изменить состояние на сервере. Поэтому браузеру требуется подтверждение от пользователя. Для решения этой проблемы мы обычно используем ПОСЛЕ ПЕРЕНАПРАВЛЕНИЯ-GET узор.
в вашем случае, просто используя location.href = location.href
должен решить проблему, так как это перезагрузит страницу с помощью GET.
это происходит, когда вы пытаетесь вернуть view(Model)
из своего в должности запрос. На самом деле вы не можете вернуть представление из в должности запрос, потому что возврат представления должен быть GET операции и это должно быть сделано под GET запрос.
Поэтому после успешной публикации данных и сохранения данных в базе данных вы должны использовать ReturnToAction
в вашем контроллере и верните свой окончательный вид из этого метода действия.
Также, Если вы хотите обновить свою страницу, вы должны использовать location.href = location.href
вместо window.reload()
, потому что location.href
получит данные через GET запрос.
Вы можете создать setTimeout
функция такая.
Это не даст вам никакого
setTimeout(function () {
window.parent.location.reload();
}, 100);
я столкнулся с той же проблемой при вызове модального окна.
Я удалил location.reload
и вернулся true
значение из функции.
Это решило мою проблему.