我开发了代码来添加/删除/下载文件到订单,它运作良好。下载代码:
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窗体,我不知道如何检查它和做什么(应用程序非常老,很大,代码遗留)。
谢谢你的帮助! :)
答案 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
}