Quel est le meilleur moyen de fermer une page ASPX à partir de code-behind?
J'ai un gestionnaire d'événements de bouton que je veux fermer la page après que l'utilisateur a cliqué sur un bouton ASP.NET sur la page. J'ai essayé d'ajouter par programme une méthode JavaScript contenant une commande window.close()
à l'événement OnClientClick
pour fermer la page, mais cela ne fonctionne pas. Le bouton est également un asp:AsyncPostBoskTrigger
pour un panneau de mise à jour AJAX.
L'application utilise .NET Framework 3.5.
METTRE À JOUR: J'ai pris en compte toutes vos suggestions et proposé la solution suivante:
Dans le code derrière:
protected void Page_Load(object sender, EventArgs e)
{
Page.ClientScript.RegisterOnSubmitStatement(typeof(Page), "closePage", "window.onunload = CloseWindow();");
}
En page aspx:
function CloseWindow() {
window.close();
}
Vous feriez généralement quelque chose comme:
protected void btnClose_Click(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.close();", true);
}
Cependant, gardez à l'esprit que différentes choses se produiront dans différents scenerios . Firefox ne vous laissera pas fermer une fenêtre que vous n'avez pas ouverte (ouverte avec window.open()
).
IE7 invite l'utilisateur avec une boîte de dialogue "Cette page tente de fermer (Oui | Non)".
Dans tous les cas, vous devez être prêt à gérer la fenêtre qui ne ferme pas toujours!
Un correctif pour les 2 problèmes ci-dessus consiste à utiliser:
protected void btnClose_Click(object sender, EventArgs e) {
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "window.open('close.html', '_self', null);", true);
}
Et créez un fichier close.html:
<html><head>
<title></title>
<script language="javascript" type="text/javascript">
var redirectTimerId = 0;
function closeWindow()
{
window.opener = top;
redirectTimerId = window.setTimeout('redirect()', 2000);
window.close();
}
function stopRedirect()
{
window.clearTimeout(redirectTimerId);
}
function redirect()
{
window.location = 'default.aspx';
}
</script>
</head>
<body onload="closeWindow()" onunload="stopRedirect()" style="">
<center><h1>Please Wait...</h1></center>
</body></html>
Notez que close.html sera redirigé vers default.aspx si la fenêtre ne se ferme pas après 2 secondes pour une raison quelconque.
protected void btnOK_Click(object sender, EventArgs e)
{
// Your code goes here.
if(isSuccess)
{
string close = @"<script type='text/javascript'>
window.returnValue = true;
window.close();
</script>";
base.Response.Write(close);
}
}
Une publication est le processus de rechargement d'une page. Si vous voulez que la page se ferme après la publication, vous devez configurer votre javascript window.close () pour qu'il s'exécute avec l'événement onload du navigateur au cours de cette publication, généralement à l'aide de la commande ClientScript.RegisterStartupScript()
fonction.
Mais êtes-vous sûr que c'est ce que vous voulez faire? La fermeture des pages a tendance à faire chier les utilisateurs.
Vous devez injecter un script de démarrage qui ferme la page une fois la publication terminée.
ClientScript.RegisterStartupScript(typeof(Page), "closePage", "<script type='text/JavaScript'>window.close();</script>");
Vous devez simplement ajouter cette propriété dans votre élément asp: Button (par exemple):
OnClientClick="javascript:window.close();"
Ça fonctionne parfaitement.
Vous pouvez fermer une fenêtre en collant simplement le code de fermeture de la fenêtre dans l'événement OnClientClick du bouton dans le balisage.
Si vous utilisez RadAjaxManager, voici le code qui aide:
RadAjaxManager1.ResponseScripts.Add("window.opener.location.href = '../CaseManagement/LCCase.aspx?" + caseId + "';
window.close();");
si vous ouvrez une page sur JavaScript popup alors
Response.Write("<script>javascript:window.close();</script>");
va faire le travail
Pour fermer une application Windows asp.net,
Puis écrivez le code donné ci-dessous dans son événement click
" this.close(); "
c'est à dire:
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
Vous pouvez simplement utiliser ceci .. court et facile.
Response.Write("<script>window.close();</script>");
J'espère que cela t'aides.
Pour ceux qui se demandent pourquoi ils ne peuvent pas obtenir les réponses fournies, c'est parce que la page doit avoir été ouverte par javascript pour pouvoir être fermée par javascript.
Étant donné que la plupart des personnes rencontrant cette question asp utilisent probablement un asp:hyperlink
ou une sorte de redirection asp pour naviguer vers la page à fermer. Ces méthodes de redirection n'utilisent pas javascript et ne seront donc pas fermées par javascript.
J'ai trouvé une solution simple pour mon application, qui élimine la NavigateUrl
et utilise le asp:Hyperlink.Attributes
pour ajouter une onclick
au lien hypertexte qui utilise un script Java pour ouvrir la fenêtre devant être fermée par javascript.
aspHyperlink.NavigateUrl = "https://www.google.com";
Le NavigateUrl ci-dessus est supprimé et nous attachons à la place notre événement click.
aspHyperlink.Attributes.Add("onclick", "javascript:openInNewTab('https://www.google.com');");
Et dans le code derrière la page contenant notre aspHyperlink, nous avons le javascript pour ouvrir l'URL fournie par Rinto
function openInNewTab(url) {
var win = window.open(url, '_blank');
win.focus();
}
Désormais, toutes les pages ouvertes avec openInNewTab
peuvent être fermées avec les réponses fournies.
window.close();
protected void Button1_Click(object sender, EventArgs e)
{
Button1.Attributes.Add("onclick"," CloseWindow();");
}
<script type="text/javascript">
function CloseWindow()
{
window.close();
}
</script>