2010-11-16 7 views
2

par exemple. J'ai un formulaire avec un ListView qui est en mode d'édition.
Quelque chose se produit pour que la table que Listview utilise ne soit plus disponible.
Je veux juste être en mesure de fermer la fenêtre si l'utilisateur frappe 'enregistrer'.fermant une fenêtre après Response.End

In Page_Load, je vérifie si la table est disponible, sinon j'appelle RegisterClientScriptBlock(type,name,"window.close()"). Cependant, le traitement se produit toujours, et il passe à L istView1_ItemUpdating event.

Dans Page_Load, si la table n'existe pas, je peux appeler Response.End pour arrêter le traitement, cependant, la fenêtre reste active puisque le script n'a jamais été enregistré.

Un moyen d'arrêter le traitement et fermer la fenêtre sans avoir à mettre un IsTableValid() personnalisé dans toutes mes méthodes?

+0

Avez-vous essayé d'utiliser Response.Flush? – ryudice

+0

oui, voir ci-dessous ... – eych

Répondre

1

une solution, kludgey, mais peut être utilisé ailleurs:

Response.Redirect("close.html")

close.html a juste

<script> 
    window.close(); 
    </script> 
2

Flush la réponse à envoyer toutes les données au navigateur avant de mettre fin:

RegisterClientScriptBlock(type,name,"window.close()") 
Response.Flush() 
Response.End() 

Vous pouvez vouloir Clear la réponse avant d'enregistrer le script, afin d'assurer qu'il n'y a rien d'autre dans la mémoire tampon de réponse .

Il existe également des méthodes ClearHeaders et ClearContent si vous souhaitez uniquement effacer l'un et pas l'autre.

+0

essayé, mais il laisse toujours une fenêtre vide. (aussi essayé Effacer) – eych

+0

@eych - A quoi ressemble la source HTML? Avez-vous des erreurs javascript? Certaines fenêtres ne peuvent pas être fermées à partir du script (par exemple, normalement, seulement si vous avez ouvert la fenêtre avec un script, pourriez-vous le fermer par script aussi).La fenêtre – Oded

+0

a été initialement ouverte avec le script, et il n'y a pas d'erreur javascript. J'ai un bouton 'Close' séparé qui, lorsqu'on clique dessus, appelle aussi la même méthode RegisterClientScript (...), et cela fonctionne, fermant le formulaire [Je suppose qu'il n'y a plus de traitement après le Button_Click]. – eych

0

Essayez ceci:

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Microsoft se say que Response.End est là uniquement pour la compatibilité ascendante:

Cette méthode est fournie uniquement pour la compatibilité avec ASP qui est, pour compatibilité avec basée sur COM technologie programmation Web ASP.NET précédait

Je ne sais pas qu'il va résoudre votre problème, mais au moins Microsoft n'aura pas une excuse .. :)

+0

merci, mais n'a pas fonctionné – eych

3

La réponse fournie par Oded ne fonctionne pas de Page_Load, je ne sais pas pourquoi. La réponse fournie par eych fonctionne. Pourtant, si vous ne voulez pas conserver un fichier html supplémentaire et faire une redirection, vous pouvez utiliser quelque chose comme:

Response.Clear(); 
Response.Write("<script>window.close();</script>"); 
Response.Flush(); 
Response.End(); 
Questions connexes