Asp.net 从服务器下载文件

Asp.net 从服务器下载文件,asp.net,download,ashx,Asp.net,Download,Ashx,我有一个ASP.NET/C页面。它基本上有一个文本框来接受用户输入。在服务器上处理数据,并生成和保存文件 最初,我使用Response.TransmitFile()将文件传输到客户端。但是,此过程在下载文件时禁用页面上的javascript 因此,我设计了一个.ashx处理程序来帮助下载该文件 现在,页面上有两个按钮。用户单击其中一个来处理和创建文件。页面回发后,另一个按钮将启用,并应单击以下载文件(调用处理程序) 我想知道的是我如何连接按钮来调用处理程序 注意:我需要将一个参数作为查询字符串发

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

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

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

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

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


注意:我需要将一个参数作为查询字符串发送给处理程序。此参数仅在“代码隐藏”中可用。

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

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

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

ASPX:


几分钟前我自己就知道了!不过还是要谢谢你!我的印象是重定向实际上会将我重定向到一个空白页面或其他地方。我想知道是否有一种方法可以在页面postsback之后隐式调用处理程序。你能解释一下吗?暗示地说,我不知道,但也许你能告诉我你还有什么问题?首先,让我帮助您澄清一下处理程序(也许您已经知道了)…如果您查看MSDN上的System.Web.Page,您会注意到它实现了IHttpHandler,就像您对自定义ASHX所做的一样。本质上,页面只是一个具有一些附加生命周期功能的处理程序。可能会帮助您从代码隐藏的角度考虑如何处理它们。这实际上不是什么问题。我不希望用户点击按钮下载文件。当用户单击第一个按钮时,是否有方法在服务器上首先处理和创建文件,并在文件准备就绪时重定向到处理程序?哦……当然。我没有从你的第一个问题中领会到这一点。我需要知道你是如何生成文件的。这是一个异步过程吗?(你能为第一次点击按钮分享一段代码吗)这是我能做到的另一个好方法。但前一个有效!无论如何,谢谢你的帮助!
<a href="/File.ashx?Id=1">Download File</a>
protected void Page_Load(object sender, EventArgs e)
{
     lnkDownloadFile.NavigationUrl = string.Format("/File.ashx?Id={0}", MyParameterValue);
}
<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);
}