c# - 强制 IE 在新窗口中打开下载

标签 c# asp.net webforms

我有一个网络应用程序,可以列出其中存储的文件。

每个项目都有一个超链接,单击该链接会强制显示“打开/保存”对话框。

现在,如果我单击指向一个 Word 文档的链接并选择“打开”,它将在它自己的窗口中打开,正如您所期望的那样。但是,如果文件是 HTML 文件并且我选择“打开”选项,它会在浏览器中打开页面 [正确] 但它会在我用来选择文档的窗口中打开 [错误]。

那么,对于这个问题:是否可以强制“打开/保存”对话框的“打开”选项在新窗口中打开文档?

编辑: 强制打开文档的超链接不仅仅是指向文件的指针(出于多种原因)。 .NavigateUrl 属性包含对 JavaScript 函数的调用,该函数向应用程序发出 Ajax 请求,从安全存储中获取文档并将其作为附件(Content-Disposition:附件)呈现给用户的浏览器

进一步编辑: JavaScript 函数只是对页面进行 Ajax 回调。 操作的结果是使页面显示在 IFrame 中。这个页面直接写入Response Object如下:

Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", FileName));
Response.AddHeader("Content-Length", String.Format("{0}", length));
Response.Flush();
Response.Close();

我想,如果可以在生成的“打开/保存”对话框中更改“打开”按钮的操作,我将在这个中执行此操作> 强制执行的代码。

如果有区别的话,这是一个用 C# 编写的 .Net v4.0 应用程序。

我知道打开新窗口的好处和坏处,但这是一个私有(private)应用程序,这是客户想要的。

最佳答案

与其让每个链接都指向基页中的 JS 函数,不如尝试这样做...

让每个链接指向一个 URL(例如/GetFileContent.aspx?fileid=123)并让该页面在加载文件之前执行必要的逻辑。保持您的 ContextType 和响应 header 代码不变。

每个链接都会打开一个新窗口,看起来像这样:

<a href="/GetFileContent.aspx?file=123" target="_blank">filename.doc</a>

关于c# - 强制 IE 在新窗口中打开下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067043/

相关文章:

c# - Compact Framework 上的BackgroundWorker 实现

c# - 模型中的表单值在发布后未在 View 中更新

c# - 将gridview转换为itextsharp表并使用asp.net生成pdf

ASP.NET 4.5 Web.config 错误

c# - 在 asp.net 中以 List<T> 格式返回记录

c# - TreeView 随机无法显示新添加的节点

c# - 从 DoWork 处理程序调用方法?

c# - 在 WPF 中执行异步任务的推荐方法是什么?

c# - 如何在 FormView 中保存 CheckBoxList 中的项目?

c# - 覆盖 Telerik Radgrid 数据绑定(bind)