【问题标题】:Why do my Button send two postbacks when downloading zip file?为什么我的 Button 在下载 zip 文件时会发送两次回传?
【发布时间】:2009-01-15 01:12:34
【问题描述】:

我在 WebForms 应用程序中遇到了问题,用户从页面上的下拉列表中选择了一些条件并点击页面上调用此方法的按钮:

protected void btnSearch_Click(object sender, EventArgs e)

然后他们根据调用此方法的标准单击按钮下载 zip 文件:

protected void btnDownload_Click(object sender, EventArgs e)

在 IE 中,浏览器顶部的栏会提示他们:

“为帮助保护您的安全,Internet Explorer 阻止了此站点 从将文件下载到您的计算机”。

当他们点击该栏下载文件时,它会再次触发 btnSearch_Click 事件。

Response.ContentTypeResponse.AddHeader 已正确设置。

问题是,btnSearch 附加了标准,所以基本上它被附加了两次并导致问题。

我能做些什么来防止这种情况发生吗?

这是一个使用 C# 3.5 的 VS2008 Web 应用程序,物有所值。

【问题讨论】:

    标签: c# webforms postback


    【解决方案1】:

    当他们单击下载按钮时,执行重定向到 ZIP 文件处理程序(页面?)以下载文件。即使用 Post-Redirect-Get 模式:http://en.wikipedia.org/wiki/Post/Redirect/Get

    【讨论】:

      【解决方案2】:

      您是否使用 Content-Disposition 标头?

      Response.AddHeader("Content-Disposition", "attachment; filename=fileName.zip");
      

      尝试更改内容类型以匹配文件类型?

      【讨论】:

      • 是的,我正在执行以下操作:Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "应用程序/八位字节流"; Response.AddHeader("Content-Disposition", "attachment;filename=" + strFileName); Response.AddHeader("Content-Length", new FileInfo(strFileLocation).Length.ToString());
      • 它对我有用,没有警告栏。尝试更改内容类型以匹配文件类型?
      【解决方案3】:

      在 Session 中保存一个布尔值,表明条件已被附加。 当用户从下拉列表中选择另一个值时,将此值设置为 false。

      在您的 btn_Download 事件中,您可以检查 Session 变量的值并避免设置两次条件。

      【讨论】:

      • 我不能这样做,主要是因为标准按钮一次构建一个标准,所以在用户最终点击下载按钮之前多次调用该按钮是完全合理的。
      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 2010-10-08
      • 1970-01-01
      • 2011-09-19
      • 2023-03-26
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      相关资源
      最近更新 更多