2 votes

Rafraîchissement de la page en ASP.NET

La boîte de dialogue Enregistrer permet d'enregistrer le fichier sur la machine locale. Mais après cela, ma page reste là et ne fait rien pendant le reste de mon processus. J'utilise le code suivant pour ouvrir une boîte de dialogue d'enregistrement

protected void lnkbtnDownload_Click(object sender, EventArgs e)
{
  string fileName = startupPath + "bin\\Inbox.mdb";
  System.IO.FileInfo targetFile = new System.IO.FileInfo(fileName);

  if (targetFile.Exists)
  {
      Response.Clear();
      Response.AddHeader("Content-Disposition", "attachment; filename=" + targetFile.Name);
      Response.AddHeader("Content-Length", targetFile.Length.ToString());
      Response.ContentType = "application/octet-stream";
      Response.WriteFile(targetFile.FullName);                        
      Response.End();
  }
}

le code html est :

<asp:Button id="lnkbtnDownload" runat="server" CausesValidation="false" 
  Text="Download" CssClass="buttonstyle"  OnClick="lnkbtnDownload_Click"></asp:Button>

mais une fois le fichier enregistré sur la machine locale et la boîte de dialogue d'enregistrement fermée, ma page ne répond plus du tout. Puis-je savoir comment faire un postback sur la page après la fermeture de la boîte de dialogue d'enregistrement ?

9voto

Andrew Corkery Points 804

L'appel à Response.End interrompt la réponse de la page.

5voto

Haacked Points 31070

Placez ce code dans un HttpHandler, puis créez un lien vers ce handler à partir de la page d'origine, en lui transmettant les informations dont il a besoin.

4voto

Canavar Points 29161

Je pense que vous devriez ouvrir une page popup / un gestionnaire qui effectue l'opération Response.WriteFile.

1voto

Jason Points 11332

L'ouvrage de Mark Brackett répondre à une question similaire devrait fonctionner ici, sauf que vous n'avez pas besoin de l'attribut url de postback de la page croisée :

<script type="text/javascript">
   var oldTarget, oldAction;
   function newWindowClick(target) {
      var form = document.forms[0];
      oldTarget = form.target;
      oldAction = form.action;
      form.target = target;

      window.setTimeout(
         "document.forms[0].target=oldTarget;"
         + "document.forms[0].action=oldAction;", 
         200
      );
   }
</script>

<asp:LinkButton runat="server" id="lnkbtnDownload"
  CausesValidation="false" Text="Download" CssClass="buttonstyle" 
  OnClick="lnkbtnDownload_Click"
  OnClientClick="newWindowClick('download');" />

Le postback s'effectuera alors dans une nouvelle fenêtre, et la gestion de la réponse existante se chargera du téléchargement. La fenêtre d'origine est restaurée pour les interactions/postbacks ultérieurs.

0voto

Gustavo Points 263

Je dirais que vous pouvez exécuter ce code à l'intérieur d'une iframe ou ouvrir une fenêtre contextuelle pour déclencher le téléchargement du fichier. Dans ce cas, vous écrasez la réponse et la page qui devait être chargée est perdue.

Je déplacerais donc ce code dans une page dédiée et mettrais en œuvre l'une des deux solutions mentionnées ci-dessus.

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