Można użyć programu obsługi HTTP (.ashx), aby pobrać plik, tak:
DownloadFile.ashx:
public class DownloadFile : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition",
"attachment; filename=" + fileName + ";");
response.TransmitFile(Server.MapPath("FileDownload.csv"));
response.Flush();
response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
Następnie można wywołać HTTP Handler z przycisku kliknij obsługi zdarzeń, takich jak to:
Markup:
<asp:Button ID="btnDownload" runat="server" Text="Download File"
OnClick="btnDownload_Click"/>
Code-Behind:
protected void btnDownload_Click(object sender, EventArgs e)
{
Response.Redirect("PathToHttpHandler/DownloadFile.ashx");
}
Podjęcie parametr do Handler http:
Można po prostu dołączy zmienną string zapytanie do Response.Redirect()
, tak:
Response.Redirect("PathToHttpHandler/DownloadFile.ashx?yourVariable=yourValue");
Następnie w aktualnym kodzie obsługi można użyć obiektu Request
n HttpContext
aby pobrać wartość zmiennej ciąg kwerendy, na przykład:
System.Web.HttpRequest request = System.Web.HttpContext.Current.Request;
string yourVariableValue = request.QueryString["yourVariable"];
// Use the yourVariableValue here
Uwaga - powszechne jest przekazać nazwę pliku jako parametr łańcuch zapytania do zasugeruje użytkownikowi, co plik rzeczywiście jest, w którym mogą zastąpić tę wartość nazwy Save as ...
można sprawdzić to podobne pytanie: http://stackoverflow.com/questions/2378204/context-response-end-and- Wątek został "przerwany" –
'response.End()' powoduje "wyjątek ThreadAbortEx". –
To jest błąd w środowisku .NET i został zgłoszony w wielu pytaniach SO. Złap ThreadAbort i gotowe. – debracey