Post Retour ne fonctionne pas après l'écriture de fichiers de réponse dans ASP.NET
Ce que j'ai?
J'ai un ASP.NET la page qui permet à l'utilisateur de télécharger le fichier a
sur un clic de bouton. L'utilisateur peut sélectionner le fichier qu'il veut à partir d'une liste de fichiers disponibles (RadioButtonList) et clique sur le bouton télécharger pour télécharger. (Je ne devrait pas fournir de lien pour chaque fichier qui peut être téléchargé - c'est l'exigence).
Ce que je veux?
Je veux à l'utilisateur de télécharger plusieurs fichiers un par un en cliquant sur le bouton d'option requis et cliquez sur le bouton.
Ce problème, suis-je face?
Je peux télécharger le fichier pour la première fois correctement. Mais, après le téléchargement, si je sélectionne un autre fichier et cliquez sur le bouton pour le télécharger, cliquez sur l'événement du bouton ne pas publier et que le second fichier ne sera pas téléchargé.
J'utilise le code suivant dans l'événement click du bouton:
protected void btnDownload_Click(object sender, EventArgs e)
{
string viewXml = exporter.Export();
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=views.cov");
Response.AddHeader("Content-Length", viewXml.Length.ToString());
Response.ContentType = "text/plain";
Response.Write(viewXml);
Response.End();
}
Je fais quelque chose de mal ici?
Même problème peut être répliqué dans IE6, IE7 et Chrome. Je pense que ce problème est indépendant du navigateur.
- Si vous êtes sur un Ajax formulaire (ou de contrôle), il peut être que l'Ajax javascript est mélangé ou bloqué depuis que vous avez retourné un autre document, au lieu de retourner Javascript qui m'attendais (un peu de viewstate info plus à jour le code html qui va dans le updatepanel). Voir aussi social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/...
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce même problème avec sharepoint. J'ai un bouton sur la page qui envoie un fichier et après avoir cliqué sur le bouton, le reste de la forme ne répondait pas. Il s'avère que c'est un sharepoint chose qui définit la variable _spFormOnSubmitCalled à true pour empêcher la poursuite de la soumet. Lorsque nous envoyer un fichier ce n'est pas l'actualisation de la page, donc nous avons besoin de définir manuellement cette variable à false.
Sur votre bouton dans la partie web d'ensemble de la OnClientClick à une fonction dans votre code javascript de la page.
Ensuite dans le code javascript, j'ai cette fonction.
Les 3 secondes de pause, j'ai trouvé était nécessaire parce que sinon j'étais définition de la variable avant de sharepoint définir. De cette façon, je laisse sharepoint jeu normalement puis-je le mettre dos à faux par la suite.
Désinvolte, ce que vous faites qui devrait fonctionner. Je l'ai fait avec succès similaire dans le passé, bien que j'utilise un répéteur et LinkButtons.
La seule chose que je peux voir, c'est différent, c'est que vous êtes en utilisant
Response.Write()
plutôt queResponse.OutputStream.Write()
, et que vous êtes à la rédaction d'un texte plutôt que binaire, mais compte tenu de laContentType
que vous avez spécifié, il ne devrait pas être un problème. En outre, j'appelleResponse.ClearHeaders()
avant l'envoi de l'info, etResponse.Flush()
par la suite (avant mon appel àResponse.End()
).Si cela peut aider, voici une version aseptisée de ce qui fonctionne bien pour moi:
Vous pouvez envisager de transférer le fichier de façon binaire, peut-être par l'appel de
System.Text.Encoding.ASCII.GetBytes(viewXml);
et le résultat le passage de l'Response.OutputStream.Write()
.La modification de votre code légèrement:
Response.ClearHeaders()
semblait être critique dans mon cas. Grâce Randolpho.Une façon simple de le faire sans enlever
Response.End
est pour ajouter un côté client js pour faire le rafraichissement de la page. Ajouter le js de votre bouton de la onclientclick de la propriété.par exemple
Supprimer
Response.End()
et de laisser la réponse en fin naturellement, dans l'ASP.NET de l'écosystème.Si cela ne fonctionne pas, je vous recommande de mettre le bouton dans un autre
<form>
et d'afficher les données nécessaires à un gestionnaire HTTP. Le programme d'installation du gestionnaire HTTP exporter le XML au lieu d'une page web.Response.End()
. Il n'a pas de travail alors que bien!<form>
et d'afficher les données nécessaires à un gestionnaire HTTP qui est de l'installation d'exporter le fichier XML?Response.ContentEncoding = Encoding.UTF8
J'ai eu le même problème. Fonction pour effectuer une simple Réponse.Auteur("") sur l'événement Clic du Bouton sur la page aspx n'a jamais été à la cuisson.
Méthode dans la classe:
Page ASPX:
Alors que j'essayais de trouver la raison, je viens d'appeler la même fonction sur
Page_Load
de l'événement, il a travaillé.Enquêter sur la question, j'ai trouvé que la Page principale de la page aspx corps était sous
<asp:UpdatePanel>
.Je l'ai enlevé, et il a travaillé sur
Button_Click
Événement. Je vous recommande de vérifier que trop.Vérifier à https://multilingualdev.wordpress.com/2014/08/19/asp-net-postback-after-response-write-work-around-solution/
Lors de l'envoi d'un fichier client et à l'aide de la réponse.écrire dans ASP.Net le développeur est incapable de faire autre chose une fois le fichier envoyé. Il existe d'autres solutions de rechange comme l'ajout d'un javascript onclick fonction appeler une fonction après que le client obtient le fichier, qui est similaire à l'ajout d'un meta refresh à la fois la fonction pour envoyer le fichier est appelé (par exemple, Réponse.AppendHeader(“Actualiser”, “5;URL=” & HttpContext.Actuel.Demande.Url.AbsoluteUri))
Mais ceux qui n'étaient pas de me donner le look que je voulais. J'ai donc utilisé une combinaison de ces solutions de rechange visant à venir avec cette solution: