0 votes

problème d'envoi du document lorsque je clique sur "Annuler".

J'ai un lien dans une page aspx et lorsque je clique dessus, une fenêtre contextuelle s'affiche : ouvrir, enregistrer, annuler

mais lorsque je clique sur annuler sur cette page aspx, aucun autre lien ne fonctionne sur cette page.

jusqu'à présent :

protected void method1()
{
            byte[] byterendered = _Filename.OpenBinary();
            Response.Clear();
            Response.ClearHeaders();
            Response.ClearContent();
            Response.ContentType = "image/jpeg";
            Response.AddHeader("Content-Disposition", "attachment;filename=abc.jpg");
            Response.CacheControl = "Public";
            Response.BinaryWrite(byterendered);
            Response.End();
}

code aspx

<asp:Linkbutton id="link1" runat="server" onClick="method1" Text="LinkA"/>
 <asp:Linkbutton id="link2" runat="server" onClick="method2" Text="LinkB" />

0voto

Grace Note Points 2015

Comme les commentaires à votre question l'ont indiqué, la raison en est que votre réponse est terminée après l'apparition de la boîte de dialogue du fichier. Une fois la réponse terminée, toute autre action sur votre page ne sera pas enregistrée. J'ai moi-même rencontré ce problème lors de la mise en œuvre d'une fonction de téléchargement pour mon application SharePoint.

Fondamentalement, ce que vous voulez faire, c'est que vos boutons de lien exécutent une fenêtre ouverte script, au lieu d'exécuter directement le transfert de fichier, comme ce qui suit.

<asp:LinkButton id="link1" runat="server" onClick="window.open('TARGETURL'); return false;" Text="LinkA" />

Remplacer TARGETURL avec l'URL d'une page aspx. Ensuite, créez une nouvelle page ASPX pour l'URL que vous avez spécifiée. Elle sera pratiquement vide, tout ce dont vous avez besoin, ce sont deux lignes.

<%@ Assembly Name="YOURFOURPARTASSEMBLYSTRINGHERE" %>
<%@ Page Language="C#" Inherits"YOURNAMESPACE.DOWNLOADCODE" %>

Remplacer YOURFOURPARTASSEMBLYSTRINGHERE avec, bien sûr, la chaîne d'assemblage en quatre parties pour votre code. YOURNAMESPACE.DOWNLOADCODE sera remplacé par l'espace de nom et la classe que vous créerez pour la page. La classe devra hériter du type de page de base, j'ai personnellement utilisé LayoutsPageBase car c'est une chose parfaite à utiliser dans une application SharePoint. Tout ce dont cette classe a besoin est une méthode OnLoad comme la suivante.

// Don't actually name your class DOWNLOADCODE.
public class DOWNLOADCODE : LayoutsPageBase
{
    protected override void OnLoad(EventArgs e)
    {
        byte[] byterendered = _Filename.OpenBinary(); //More on this afterwards
        Response.Clear();    
        Response.ClearHeaders();    
        Response.ClearContent();    
        Response.ContentType = "image/jpeg";    
        Response.AddHeader("Content-Disposition", "attachment;filename=abc.jpg");    
        Response.CacheControl = "Public";    
        Response.BinaryWrite(byterendered);    
        Response.End(); 
    }
}

Vous devrez récupérer _Filename dans cette nouvelle page, bien sûr. La meilleure façon de le faire est de prendre les paramètres que vous utilisez pour déterminer _Filename en premier lieu, et de les passer dans la chaîne de requête de l'URL.

En utilisant ceci, cliquer sur le bouton de lien ouvrira une nouvelle fenêtre, mais puisque cette page n'a qu'une réponse de fichier, elle ouvrira simplement le dialogue de fichier et en aura fini avec cela. Pendant ce temps, votre page aspx d'origine n'aura pas terminé sa réponse, et pourra donc poursuivre n'importe quelle fonction dont vous avez besoin.

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