après l'utilisation de la Page.Réponse à envoyer un fichier à l'utilisateur, la page ne répond pas
J'ai créé une page qui permet aux utilisateurs de télécharger un fichier lorsqu'ils cliquent sur un bouton... l'événement onclick du bouton est relié au suivant morceau de code:
this.Page.Response.Clear();
this.Page.Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Zip;
this.Page.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + System.IO.Path.GetFileName(filename) + "\"");
this.Page.Response.TransmitFile(filename);
this.Page.Response.Flush();
this.Page.Response.End();
Le téléchargement fonctionne très bien, mais maintenant, quand j'essaie d'interagir avec la page (par exemple, cliquez sur le bouton télécharger à nouveau), rien de postes en arrière.
Suis-je répondre à la demande de téléchargement de manière incorrecte (devrais-je utiliser un autre/nouvelle réponse de l'objet), ou est-il autre chose que je dois faire pour rendre la page active après le téléchargement?
Edit:
J'ai donc essayé encorporating les deux affiches des suggestions pour la création d'un httphandler, et appelant une Réponse.Redirection vers le gestionnaire de l'événement click du bouton.
void submitButton_Click(object sender, EventArgs e)
{
label.Text = "Boo!";
this.Page.Response.Redirect("~/ViewAttachment.ashx?id=foo", false);
}
Si je fais un pas de travers ce sur le débogueur, il continue après la redirection d'appel, mais la page ne renvoie à un état où le bouton ne fonctionne pas, et les étiquettes ont leurs valeurs par défaut. Suis-je en train de faire la redirection de mal?
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez un autre gestionnaire d'une option?
Voici une version allégée de ce que j'ai utilisé avant (suggestions bienvenues c'était un rapide écriture). Le HttpHandler (AttachmentFile est juste une classe avec les données blob et certains attributs recueillies lorsque le fichier a été uploadé):
Dans le
web.config
:Puis tout ce que vous faire est de rendre un lien dans le formulaire de
~/ViewAttachment.ashx?ID=5
sur la page, en cliquant sur le bouton télécharger le fichier, mais pas le désordre de votre page de son cycle de vie à tous.Il y a maintenant plus de considérations, comme la sécurité et la ces....J'ai coupé pour cet exemple. Je suis également utiliser ce type de lien:
~/Attachment/{id}
via les formulaires web de routage...si l'un de ces intérêts à vous, je vais mettre à jour les inclure. Ou vous pouvait haïr cette approche tout-ensemble...juste laisser vous savez que c'est une option.<asp:HyperLink runat="server" NavigateUrl="~/ViewAttachment.ashx?ID=5">Click Me</asp:HyperLink>
...ou de lui donner un ID et définir la NavigateUrl à partir du code-behind.Vous êtes surtout là.
Tout ce que vous devez faire dans votre event handler est la Réponse.Rediriger vers une autre page ASPX. Placer ce code votre écrit sur l'autre page.
Ensuite, tout fonctionnera comme prévu. Le navigateur fait rester sur la page d'origine et ne pas aller à la nouvelle page parce que vous avez mis la disposition du contenu de l'attachement, ce qui est excellent.
Par l'aide de la Réponse.Clear() vous avez tué les en-têtes. Bien qu'il puisse sembler être valide des balises html dans le navigateur, il n'y a vraiment pas. Les en-têtes ont disparu, de sorte que les contrôles qui semblent être encore rendus ne sont pas valides. Si vous cliquez sur "retour", vous devriez être en mesure de transférer de l'information. Ce que vous voulez probablement faire est de faire de cet appel dans une autre fenêtre à l'aide de PostBackUrl dans votre clic de bouton et le réglage de la cible de votre forme à une autre fenêtre (puis à l'aide de SetTimeout pour rétablir _self).