Эта строка:
lblEmpl.Visible = True
Никогда не получает удар, потому что эта строка:
Response.End()
Бросает ThreadAbortException
Я думаю, что более простой способ справиться с этим - создать простой компонент HttpHandler и «открыть» его во всплывающем окне. (Всплывающее окно на самом деле не должно открываться. В большинстве случаев браузер поймет, что это на самом деле загрузка, и заблокирует вкладку / окно.)
Исследуйте интерфейс IHttpHandler
. Они на самом деле довольно просты в реализации.
Вот пример обработчика. Извините, что это заняло некоторое время, меня вызвали на встречу:
public class CensusHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string fileName = String.Format(
CultureInfo.CurrentUICulture,
"E_{0:00}{1:00}.csv",
DateTime.Today.Month,
DateTime.Today.Day
);
context.Response.ContentType = "text/csv";
context.Response.AddHeader(
"Content-Disposition", String.Format(null, "attachment; filename={0}", fileName)
);
//Dump the CSV content to context.Response
context.Response.Flush();
}
public bool IsReusable { get { return false; } }
}
ОК, попробуйте добавить событие javascript onclick для запуска загрузки:
<asp:Button ID="Clickety" runat="server" Text="Click Me!" OnClick="Clickety_Click"
OnClientClick="window.open('Handler.ashx', 'Download');" />
Обычное событие OnClick
вызовет ваш код обратной передачи. Событие javascript onclick (OnClientClick
) запустит загрузку через HttpHandler
.