Чтобы снова отобразить веб-страницу, 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 значение из функции.
Это решило мою проблему.