如何从回复自身的模态对话框下载文件?

时间:2012-10-12 11:58:26

标签: javascript asp.net webforms

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

当我尝试添加按钮来下载文件时出现问题。当我尝试从此对话框下载文件时,没有任何反应。我可以将我的响应重定向到有问题的文件,但我无法将文件写入响应,因为当我单击按钮并且没有任何反应时,对话框就位于那里。

1 个答案:

答案 0 :(得分:2)

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

  1. Response.WriteFile()在webforms中工作正常,即使使用当前窗口的目标设置表单也是如此。
  2. 除非将表单设置为当前窗口的目标,否则模态对话框可以完美地下载文件。
  3. 通过广泛的测试,这似乎是一个模糊的错误,甚至可能是一种奇怪的安全尝试。这似乎也是针对IE 8的,但我没有测试其他版本的IE。

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

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

    这修复了IE错误并且似乎在所有其他浏览器中都有效(尽管我不能让Opera显示弹出窗口,即使是“允许所有弹出窗口”)。

    认为我辛苦工作的日子不应该浪费,也许这将有助于其他人。