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?
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.
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.
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;
Vous pouvez créer une fonction setTimeout
comme celle-ci.
Cela ne vous donnera pas
setTimeout(function () {
window.parent.location.reload();
}, 100);
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.