ASP WebForms文件下载有时只能起作用

时间:2015-06-12 10:35:34

标签: asp.net download webforms

我开发了代码来添加/删除/下载文件到订单,它运作良好。下载代码:

Response.Clear();
Response.ClearHeaders();
Response.ContentType = GetContentType(fileExtension);
Response.AppendHeader("Content-Disposition", 
    String.Format("attachment; filename=\"{0}\"", fileName));
Response.WriteFile(filePath);
Response.Flush();
Response.Close();

当代码在DataList中的OnItemCommand方法中时,一切都很好。

protected void dlAttachemnts_OnItemCommand(object sender, DataListCommandEventArgs e)
{
    if (e.CommandName == "btnDeleteAttachemnt")
    {
        ...
    }

    if (e.CommandName == "btnDownloadAttachment")
    {
        // Download
    }
}

但是当代码在其他页面上的按钮中的Click方法下载时,无法正常工作。

protected void btnDownload_Click(object sender, EventArgs e)
{
    // Download
}

我在Global.asax.cs中的Application_Error()中收到带有消息&#34的HttpUnhandledException;在发送HTTP头后,服务器无法设置内容类型"。

我仔细检查了filePath,fileExtension等,没关系。

我怀疑我同时发送两个文件nad页面,但我不熟悉Web窗体,我不知道如何检查它和做什么(应用程序非常老,很大,代码遗留)。

谢谢你的帮助! :)

1 个答案:

答案 0 :(得分:0)

我在自己的更改按钮上解决了链接

在:

<asp:Button ID="btnDownload" runat="server" Text="Download" OnClick="btnDownload_Click" />

后:

<a class="input-button-lookalike" href="/DownloadHandler.ashx?
   fileName=myFile.txt" target='"_blank"'>Download</a>

我还添加了样式输入按钮外观,以便链接看起来很好用其他按钮和添加处理程序DownloadHandler.ashx代码:

 public void ProcessRequest(HttpContext context)
 {
      var fileName = context.Request.QueryString["fileName"];
      // Download as in question
 }