保存对话框将文件保存到本地计算机。但在那之后,我的页面就站在那里,对我的剩余工作没有任何作用。我使用下面的代码打开一个保存对话框
protected void lnkbtnDownload_Click(object sender, EventArgs e)
{
string fileName = startupPath + "bin\\Inbox.mdb";
System.IO.FileInfo targetFile = new System.IO.FileInfo(fileName);
if (targetFile.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + targetFile.Name);
Response.AddHeader("Content-Length", targetFile.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(targetFile.FullName);
Response.End();
}
}
html代码是:
<asp:Button id="lnkbtnDownload" runat="server" CausesValidation="false"
Text="Download" CssClass="buttonstyle" OnClick="lnkbtnDownload_Click"></asp:Button>
但是在将文件保存到本地计算机并且保存对话框关闭后,我的页面根本没有响应。在保存对话框关闭后,我可以知道如何对页面进行回发。
答案 0 :(得分:9)
因为您正在调用Response.End,所以会暂停页面的响应。
答案 1 :(得分:5)
将此代码放在HttpHandler中,然后从原始页面链接到该处理程序,传入处理程序所需的任何信息。
答案 2 :(得分:4)
我认为您应该打开一个执行此Response.WriteFile操作的弹出页面/处理程序。
答案 3 :(得分:1)
马克·布拉克特的answer类似问题应该适用于此,除非您不需要跨页回发网址属性:
<script type="text/javascript">
var oldTarget, oldAction;
function newWindowClick(target) {
var form = document.forms[0];
oldTarget = form.target;
oldAction = form.action;
form.target = target;
window.setTimeout(
"document.forms[0].target=oldTarget;"
+ "document.forms[0].action=oldAction;",
200
);
}
</script>
<asp:LinkButton runat="server" id="lnkbtnDownload"
CausesValidation="false" Text="Download" CssClass="buttonstyle"
OnClick="lnkbtnDownload_Click"
OnClientClick="newWindowClick('download');" />
这将导致在新窗口中发生回发,并且您现有的响应处理将负责下载。将恢复原始窗口表单以供将来的交互/回发。
答案 4 :(得分:0)
我说你可以在iframe中运行这个代码,或者你可以打开一个弹出窗口来触发文件下载。在这种情况下,您将覆盖响应,并且您希望加载的页面将丢失。
因此,我会将此代码移至专用页面并实现上述两种解决方案之一。
答案 5 :(得分:0)