asp.net window.showModalDialog模态窗口无法下载文档问题

本文介绍了一种在模态窗口中实现Word文件下载的方法。通过后台代码设置响应头及文件属性,确保用户能够正常下载所需的Word文件。同时,前端页面需要进行特定配置以支持文件下载功能。

1、在模态窗口中下载word没有反应,需要实现的功能如图:
这里写图片描述
2、后台代码:

   case "updates"://下载
                    attmodel = attbll.GetModel(Convert.ToDecimal(ATTACHIDs));
                    string path = attmodel.ATTATCHPATH.ToString();
                    string ATTACHTITLE = attmodel.ATTACHTITLE.ToString();
                    string ATTFILETYPE = attmodel.ATTATCHTYPE.ToString();
                    //ATTACHTITLE:文件名称,ATTFILETYPE;.doc后缀名
                    string name = ATTACHTITLE + ATTFILETYPE;
                    // 保存文件的虚拟路径
                    string Url = "~/" + path;
                    // 保存文件的物理路径
                    string FullPath = HttpContext.Current.Server.MapPath(Url);
                    // 去除文件的只读属性
                    File.SetAttributes(FullPath, FileAttributes.Normal);
                    // 初始化FileInfo类的实例,作为文件路径的包装
                    FileInfo FI = new FileInfo(FullPath);
                    // 判断文件是否存在
                    if (FI.Exists)
                    {
                        // 将文件保存到本机
                        this.Response.Clear();
                        this.Response.ClearContent();
                        this.Response.ClearHeaders();
                        this.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name));
                        this.Response.AddHeader("Content-Length", FI.Length.ToString());
                        this.Response.AddHeader("Content-Transfer-Encoding", "binary");
                        this.Response.ContentType = "application/octet-stream";
                        this.Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8");
                        this.Response.WriteFile(FI.FullName);
                        this.Response.Flush();
                        Response.Close();
                        this.Response.End();
                        BindGrid();
                    }
                    break;

3、模态窗口前台需要注意的是需要在head 标签和body标签中加入如下代码:

<head runat="server">
<base target="download"/>
</head>
<body class="table_b">
<iframe id="download" name="download" height="0px" width="0px"></iframe>
</body>
在JavaScript中,`window.showModalDialog()` 是旧版IE浏览器中的一个API,用于显示模态对话框。然而,随着现代浏览器对HTML5的普及和支持,这个方法已经被弃用,推荐使用更现代、跨浏览器的方式来实现模态效果。 现代的做法通常使用以下技术: 1. **HTML5 Dialogs** (并非完全替代modal,但在支持的浏览器上可用):`window.showModalDialog` 的功能可以用 `<dialog>` 元素来模拟,比如: ```javascript let dialog = document.createElement('dialog'); dialog.innerHTML = '这是模态内容'; dialog.open(); ``` 记得在关闭时添加事件监听处理: ```javascript dialog.addEventListener('close', function (event) { event.preventDefault(); // 阻止默认关闭行为 dialog.remove(); // 删除元素以释放资源 }); ``` 2. **Bootstrap Modal** 或其他前端UI库:如Bootstrap提供了一个完整的模态组件,可以轻松创建响应式的模态窗口。例如: ```html <button type="button" data-toggle="modal" data-target="#myModal">打开模态</button> <div id="myModal" class="modal fade"> <!-- 内容 --> </div> ``` 然后在JS里初始化它: ```javascript var modal = $('#myModal').modal('show'); ``` 3. **自定义JavaScript库**:如果你需要更多的定制选项,也可以编写自己的简单弹窗函数,例如使用`CSS`隐藏和显示元素。 由于`window.showModalDialog` 已经过时,尽量避免在新项目中使用,而选择现代浏览器兼容的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值