web-dev-qa-db-fra.com

Pour afficher à nouveau la page Web, Internet Explorer doit renvoyer

Dans ma page ASP.NET WebForms, une fenêtre modale s'ouvre. Le code javascript permettant d’afficher cette fenêtre modale est le suivant: 

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);
}

Une fois la fenêtre modale fermée, je dois actualiser la page parent (d'où la position location.reload (true); à la fin) pour que les modifications apportées à la fenêtre modale prennent effet.

Maintenant, la chose est que parfois (pas à chaque fois, exaspéré) quand je ferme cette fenêtre modale, je reçois un message d'avertissement qui dit:

"Pour afficher à nouveau la page Web, Internet Explorer doit renvoyer les informations que vous avez récemment envoyées.

Si vous effectuez un achat, vous devez cliquer sur Annuler pour éviter une transaction en double. Sinon, cliquez sur Réessayer pour afficher à nouveau la page Web. "

Des idées pourquoi cela se produit?

9
Sperick

C'est le problème de la double soumission dans les navigateurs. 

Lorsqu'une page est chargée à l'aide de la demande POST et que vous essayez de recharger la page à l'aide de location.reload(true);, le navigateur doit envoyer une autre demande POST au serveur, ce qui peut entraîner des problèmes car POST est supposé changer d'état sur le serveur. Par conséquent, le navigateur a besoin d'une confirmation de l'utilisateur. Pour résoudre ce problème, nous utilisons généralement POST-REDIRECT-GET pattern.

Dans votre cas, le simple fait d'utiliser location.href = location.href devrait résoudre le problème car cela rechargerait la page à l'aide de GET.

30
Khanh TO

Cela se produit lorsque vous essayez de renvoyer view(Model) à partir de votre demandePOST. En fait, vous ne pouvez pas retourner une vue à partir dePOSTrequest car le retour d’une vue est supposé être une opérationGETet vous devez le faire sousGETrequest.
Ainsi, après avoir correctement enregistré vos données et les avoir enregistrées dans la base de données, vous devez utiliser ReturnToAction dans votre contrôleur et renvoyer votre vue finale à partir de cette méthode d'action.

De même, si vous souhaitez actualiser votre page, vous devez utiliser location.href = location.href au lieu de window.reload(), car location.href obtiendra les données viaGETrequest.

3
Sagar Arora

Le message d'alerte s'affiche lors de l'actualisation d'une page dans IE à l'aide de Cela fonctionne ... Lorsque vous souhaitez actualiser la page parent.

Cela pourrait être une âme valide:

window.opener.location.href = window.opener.location.href;
1
Sanjay Singh

Vous pouvez créer une fonction setTimeout comme celle-ci.
Cela ne vous donnera pas 

setTimeout(function () {
    window.parent.location.reload();
}, 100);
1
pixellab

J'ai rencontré le même problème en appelant la fenêtre modale.
J'ai supprimé location.reload et viens de renvoyer la valeur true de la fonction.
Cela a résolu mon problème.

0
bhooshan Sane