0

ASP.Net Webforms 页面被包裹在一个庞大的表单中,这限制了页面上的其他表单,因为嵌套表单不起作用。这是有意的,因为在 webforms 项目中,每个页面只能有一个表单,并且所有服务器/客户端交互都需要它。为了构建自定义表单,我以这种方式组合了一个模态对话框。为了允许来自服务器的正确错误消息,我的模式对话框必须回发给自己。为了做到这一点,我按照这个技巧使用表单目标作为对话框所在窗口的名称。

当我尝试添加一个按钮来下载文件时,问题就来了。当我现在尝试从此对话框下载文件时,没有任何反应。我可以将我的响应重定向到有问题的文件,但我不能将文件写入响应,因为当我单击按钮时对话框就在那里,没有任何反应。

4

1 回答 1

2

经过一段时间的研究和构建一个小测试用例,我发现这里有几个有趣的因素。

  1. Response.WriteFile() 在网络表单中工作正常,即使表单设置为当前窗口的目标。
  2. 模态对话框可以完美地下载文件,除非表单设置为当前窗口的目标。

通过广泛的测试,这似乎是一个不起眼的错误,甚至可能是一种奇怪的安全尝试。这似乎也特定于 IE 8,尽管我没有测试其他版本的 IE。

在模态对话框中允许下载的技巧是更改表单的目标。

function downloader() {
    document.getElementById("form1").target = "_blank";
}

这修复了 IE 错误并且似乎可以在所有其他浏览器中工作(尽管我根本无法让歌剧显示弹出窗口,即使使用“允许所有弹出窗口”也是如此)。

认为我的辛勤工作不应该浪费,也许这会在未来对其他人有所帮助。

于 2012-10-12T11:58:25.807 回答