Как указано в комментариях к вашему вопросу, причина в том, что ваш ответ заканчивается после появления диалогового окна файла. После окончания ответа любые другие действия на вашей странице не будут зарегистрированы. Я сам столкнулся с этим при реализации функции загрузки для моего приложения SharePoint.
По сути, вы хотите, чтобы кнопки ссылок выполняли сценарий открытия окна вместо прямой передачи файла, как показано ниже.
<asp:LinkButton id="link1" runat="server" onClick="window.open('TARGETURL'); return false;" Text="LinkA" />
Замените TARGETURL
URL-адресом aspx-страницы. Затем создайте новую страницу ASPX для указанного вами URL. Это будет в значительной степени пусто, все, что вам нужно, это две строки.
<%@ Assembly Name="YOURFOURPARTASSEMBLYSTRINGHERE" %>
<%@ Page Language="C#" Inherits"YOURNAMESPACE.DOWNLOADCODE" %>
Замените YOURFOURPARTASSEMBLYSTRINGHERE
, конечно, на сборочную строку из четырех частей для вашего кода. YOURNAMESPACE.DOWNLOADCODE
будет заменено пространством имен и классом, который вы создадите для страницы. Класс должен будет наследовать базовый тип страницы, я лично использовал LayoutsPageBase, так как это идеальная вещь для использования в приложении SharePoint. Все, что нужно этому классу - это метод OnLoad, подобный следующему.
// 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();
}
}
Конечно, вам придется получить _Filename на этой новой странице. Лучший способ сделать это - взять все параметры, которые вы используете для определения _Filename, и передать его как часть строки запроса URL.
Используя это, нажатие на кнопку ссылки откроет новое окно, но, поскольку на всей этой странице есть ответ на файл, он просто откроет диалоговое окно файла и с этим покончено. Между тем ваша исходная страница aspx не закончила свой ответ, поэтому она может продолжать любую функцию, в которой вы нуждаетесь.