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.