3 votes

Actualisez le contenu de la page après Response.End()

J'ai un morceau de code qui génère un fichier csv dynamiquement. L'utilisateur clique sur un bouton, je prépare la chaîne, puis je fais quelque chose comme suit :

MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(sb.ToString()));
Response.Clear();
Response.ContentType = "Application/csv";
Response.AppendHeader("content-disposition", String.Format("attachment; filename={0}.csv", fileName.ToString()));
Response.BinaryWrite(stream.ToArray());
Response.End();

L'utilisateur est ensuite invité à télécharger ou enregistrer le fichier nouvellement généré. Le problème est que après cela, je dois rafraîchir certaines données sur la page. Après Response.End, cela n'est plus possible.

Des idées sur la façon de surmonter le problème ?

4voto

m.edmondson Points 13514

C'est un problème courant et il existe de nombreuses façons de le résoudre qui se résument toutes à la nécessité de créer deux requêtes distinctes vers votre serveur. La première demandera votre CSV et la seconde demandera votre rafraîchissement.

Avec cela à l'esprit, il est évident que vous pouvez soit :

  • Demander à l'utilisateur de créer les deux requêtes (en cliquant séparément sur deux liens)
  • Utiliser JavaScript pour les créer tous les deux lorsque l'utilisateur ne clique qu'une fois

Par exemple, le lien qui déclenche le téléchargement de votre CSV pourrait également appeler une fonction JavaScript qui provoque le rafraîchissement de vos données. La manière habituelle de faire cela serait d'utiliser OnClientClick pour appeler un script JavaScript qui actualisera vos données.

Cependant, vous pouvez décider de la meilleure façon de procéder en fonction de votre application.

3voto

abatishchev Points 42425

Peut-être qu'en cliquant sur un bouton, cela redirigera l'utilisateur dans une nouvelle fenêtre vers un gestionnaire (ashx) qui renverra le flux / invitera l'utilisateur à enregistrer le fichier ?

-ou-

Mettre à jour le contenu d'abord, puis envoyer le fichier à un utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X