我有问题听起来很奇怪!我将从用户控件使用asp.net C#下载文件。这是我的网络表单的结构:
下载文件的代码如下:
protected void listViewBooks_ItemCommand(object sender, ListViewCommandEventArgs e)
{
if (e.CommandName != "Download") return;
var books = _lib.GetBookInfo(Convert.ToInt32(e.CommandArgument));
var filePath = string.Empty;
foreach (var s in books)
{
filePath = s.FilePath;
}
var fileName = filePath.Substring(filePath.LastIndexOf(@"/", StringComparison.Ordinal) + 1);
filePath = Server.MapPath("~/PDF/") + fileName;
var file = new FileInfo(filePath);
if (!file.Exists) return;
Response.ClearContent();
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename=" + file.Name);
Response.AddHeader("Content-length", file.Length.ToString(CultureInfo.InvariantCulture));
Response.ContentType = "application/octet-stream";
Response.TransmitFile(file.FullName);
Response.End();
}
实际上,它走到 Response.End()之前的行,我不知道它为什么永远不会捕获事件的最后一个部分,即"}& #34;从用户的角度来看,没有任何反应!我已经搜索了几个小时的网络和类似的问题,但无法找到任何解决方案!例如,this linke或this one以及其他一些 任何帮助高度赞赏!
答案 0 :(得分:0)
它永远不会到达最后一个括号,因为您使用的是Response.End():
End方法使Web服务器停止处理脚本并返回当前结果。不处理该文件的其余内容。
您无法从UpdatePanel
下载文件。你必须触发一个完整的回发。
答案 1 :(得分:0)
最后,我昨天提出了这个问题。由于指定用户控件中的代码流我不得不在列表视图数据绑定事件中编写更新面板触发器代码,并且它只是解决了:)感谢各位帮助我的人。