繁体   English   中英

ASP.NET中的页面刷新

[英]Page Refresh in ASP.NET

保存对话框将文件保存到本地计算机。 但在那之后,我的页面就站在那里,对我的剩余工作没有任何作用。 我使用下面的代码打开一个保存对话框

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>

但是在将文件保存到本地计算机并且保存对话框关闭后,我的页面根本没有响应。 保存对话框关闭后,我可以知道如何回页。

因为您正在调用Response.End,所以这会暂停页面的响应。

将此代码放在HttpHandler中,然后从原始页面链接到该处理程序,传入处理程序所需的任何信息。

我认为你应该打开一个执行此Response.WriteFile操作的弹出页面/处理程序。

Mark Brackett对类似问题的回答应该适用于此,除非您不需要跨页回发url属性:

<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');" />

这将导致在新窗口中发生回发,并且您现有的响应处理将负责下载。 将恢复原始窗口表单以供将来的交互/回发。

我说你可以在iframe中运行这个代码,或者你可以打开一个弹出窗口来触发文件下载。 在这种情况下,您将覆盖响应,并且您希望加载的页面将丢失。

因此,我将此代码移至专用页面并实现上述两种解决方案之一。

你不能用2个回答回答单个请求(即按钮回发)。

但是,您可以将回发更改为重定向到单独的下载/确认页面,然后使用iframe启动下载。

看到这个问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM