Je voudrais utiliser standard ASP.NET Fichier Télécharger la réponse, comme dans une autre question de dépassement de pile . mais à l'intérieur du panneau de mise à jour, il ne fonctionne pas. Ce que je dois faire, que je recevrai un fichier si l'événement de téléchargement est déclenché à l'intérieur du panneau de mise à jour? P> p>
4 Réponses :
Vous devez avoir ceci dans un ASPX séparé qui n'utilise pas Ajax. Ajax met à jour le marquage HTML existant sur une page du côté du client. Ce que vous essayez ici, vous remplacez le contenu de la réponse du côté du serveur avant d'envoyer quelque chose au client.
Vous pouvez essayer ceci: p>
avoir une page appelée dans votre page d'origine, Vous avez un appel JavaScript qui appelle la page de téléchargement comme ceci: p> download.aspx code> qui contient le code de transmission que vous avez déjà. p>
Vous pouvez essayer de faire un gestionnaire pour ce travail.Il est plus sûr si vous pouvez bien modifier. Pour ce travail, vous devez crypter le chemin de fichier dans votre page où vous mettez un lien pour le fichier.
string mimeType = Registry.GetValue(string.Format(@"HKEY_CLASSES_ROOT\.{0}", Path.GetExtension(decryptedfilePath)), "Content Type", null).ToString(); //Then everything is ready for download byte[] buffer = File.ReadAllBytes(decryptedfilePath); context.Response.OutputStream.Write(buffer, 0 , buffer.Length); context.Response.Flush();
Eh bien, j'ai trouvé de Nice Blog Post sur Encosia qui décrit la solution de ce problème de téléchargement de fichier ASP.net Ajax. Ça marche vraiment bien. P>
http://encia.com/2007/02 / 23 / ajax-file-téléchargements-and-iframes / p>
J'ai pu résoudre ceci en appelant une fonction JavaScript, qui appelle __dopostback sans __eventTarget.
var eventArg = Page.Request.Form["__EVENTARGUMENT"]; if (!string.IsNullOrEmpty(eventArg) && eventArg.Contains("###")) { var eventParams = eventArg.Split(new string[] { "###" }, StringSplitOptions.RemoveEmptyEntries); if (eventParams.Length == 2 && eventParams[0] == this.ClientID) { ExportGrid(eventParams[1]); return; } }
J'ai initialement essayé de passer l'identifiant de la grille comme cible d'événement, mais Dopostback était assez intelligent de savoir que c'est un contrôle à l'intérieur d'un panneau Ajax et de faire et d'Ajax Postback à la place.
Je suis curieux de savoir pourquoi vous ne construisez pas simplement une URL pointant vers le fichier que vous souhaitez offrir au client et donnez-le au navigateur à utiliser pour télécharger votre fichier. ?
C'est un fichier TXT, qui serait normalement indiqué directement dans le navigateur. Si le type de contenu est défini sur "Application / Octet-Stream", je suppose que le navigateur lancera à la place un téléchargement sur le disque.
Le fichier "txt" n'est qu'un exemple. Et il n'est pas directement affiché dans le navigateur. Avec cette réponse, il est toujours téléchargeable.