从服务器下载文件

时间:2013-04-18 03:39:27

标签: asp.net download ashx

我有一个ASP.NET / C#页面。它基本上有一个文本框来接受用户输入。数据在服务器上处理,生成并保存文件。

最初我使用Response.TransmitFile()将文件传输到客户端。但是,此过程会在下载文件时禁用页面上的javascript。

因此,我设计了一个.ashx处理程序来帮助下载文件。

现在,页面上有两个按钮。用户单击一个来处理并创建文件。页面回发后,另一个按钮被启用,应该单击以下载文件(调用处理程序)。

我想知道的是如何连接按钮来调用处理程序?

注意:我需要将参数作为查询字符串发送到处理程序。此参数仅在后面的代码中可用。

2 个答案:

答案 0 :(得分:1)

我知道你特别询问按钮,但你可以让第二个按钮成为一个超链接,而不是按钮的样式,并将NavigationUrl(或href)设置为.ashx路径。我对你的处理程序的代码做了一些假设,但由于它是一个处理程序,你可以通过HTTP GET请求直接调用它。

<asp:HyperLink ID="lnkDownloadFile" runat="server" NavigationUrl="/File.ashx?Id=1" Text="Download File" />

<a href="/File.ashx?Id=1">Download File</a>

如果需要在代码隐藏中设置参数,可以在其中一个Lifecycle事件中设置它,例如Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
     lnkDownloadFile.NavigationUrl = string.Format("/File.ashx?Id={0}", MyParameterValue);
}

答案 1 :(得分:1)

如果您特别想要一个按钮,对于请求,您可以采用这种方法:

ASPX:

<asp:Button ID="btnDownloadFile" runat="server" OnClick="btnDownloadFile_Click" />

代码隐藏:

protected void btnDownloadFile_Click(object sender, EventArgs e)
{
    Response.Redirect(string.Format("/File.ashx?Id={0}", MyParameter);
}