2009-05-29 8 views
0

J'ai une page pop-up qui s'ouvre lorsque je sélectionne un lien sur la fenêtre parente. Si une exception se produit dans le gestionnaire de chargement de la fenêtre contextuelle, l'erreur doit aller à la fenêtre parente et non à la page contextuelle. Si une exception ne se produit pas dans la page contextuelle, elle chargera la fenêtre contextuelle uniquement avec le contenu.Response.redirect on Popup pour aller à la page principale

Un message d'erreur provient d'une page Asp.

Le code dans le bloc de capture de la page popup:

catch(Exception ex) 
{ 
    Response.Redirect(""); 
    Response.End(); 
} 

Répondre

0

Vous ne pouvez pas utiliser Response.Redirect pour décider où la page sera chargée. Cela est décidé avant que la demande ne soit envoyée au serveur, donc lorsque le code du serveur commence à s'exécuter, il est déjà trop tard pour changer l'emplacement de la page.

Si vous souhaitez fermer la fenêtre contextuelle et charger une page dans la fenêtre parente, vous devez écrire du code Javascript dans le popup qui le fait.

Exemple:

catch (Exception ex) { 
    Response.Write(
     "<html><head><title></title></head><body>" + 
     "<script>" + 
     "window.opener.location.href='/ErrorPage.aspx?message=" + Server.UrlEncode(ex.Message) + "';" + 
     "window.close();" + 
     "</script>" + 
     "</body></html>" 
    ); 
    Response.End(); 
} 
0

Si vous gérez l'erreur dans le bloc catch, ce que vous pouvez faire - déclarer une variable javascript et définir le texte d'erreur dans cette variable.

var errorDescription = ""; //Will hold the error description (in .aspx page). 

Si l'erreur se produit, vous le faites dans le bloc catch -

try 
{ 
    //Code with error 
} 
catch(Exception ex) 
{ 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ErrorVariable", string.Format("errorDescription = '{0}'; CloseWindow();", ex.Message), true); 
} 

Ce que le code ci-dessus fera - définir la description de l'erreur, et appelez la fonction CloseWindow() sur votre page ASPX. La fonction contiendra les lignes de code suivantes -

function CloseWindow() { 
    window.parent.window.SetError(errorDescription); 
    self.close(); 
} 

Cette fonction appellera la fonction de la fenêtre parente et se fermera elle-même. La fonction SetError() peut afficher l'erreur de la manière que vous voulez.

0

Je pense que ce serait une meilleure expérience utilisateur d'utiliser un popup javascript et de faire la demande via AJAX plutôt que d'utiliser une nouvelle fenêtre et un cycle de demande de page complète. Le faire en javascript vous donne la possibilité de garder toute l'interaction sur la même page et rendrait trivial pour obtenir votre message d'erreur dans l'interface "principale". Parmi de nombreuses autres façons de faire cela, vous pouvez utiliser jQuery pour fournir à la fois l'interface AJAX et le plugin dialog pour gérer la boîte de dialogue modale.

Questions connexes