showModalDialog模式窗体文件导出

摘要:
  今天客户要求在模式窗体下,做一个word的文件流下载。以前在非模态的窗体做过这个功能,知道在模式窗体下使用文件流弹不出下载页面,所以上网找了一些材料。
解决方案描述:

1、文件下载流输出方式:

FileInfo file = new FileInfo(Server.MapPath(string.Format(@"\Temp\{0}", fileName)));
            Response.Clear();
            Response.Charset = "GB2312";
            Response.Buffer = true;
            Response.ContentEncoding = System.Text.Encoding.UTF8;
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(file.Name));
            Response.AppendHeader("Content-Length", file.Length.ToString());
            Response.ContentType = "application/msword";
            Response.WriteFile(file.FullName);
            Response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest();

使用最简单的WriteFile方法输出文件流;
2、在页面添加一个高、宽为0的iframe,绑定SetTarget前台方法;

<asp:Button ID="printBtn" runat="server" CssClass="StandardBtn50" Text="打印" OnClientClick="SetTarget();" />
<iframe id="download" name="download" height="0px" width="0px"></iframe>


3、控制输出目标,使用jquery过滤,增加的input的click方法,改变target的值

<base target="_self" />
<script language="javascript" type="text/javascript">
        $(document).ready(function () {
            $(':input').click(function() {
                SetSelfTarget(this);
            });
        });

        function SetTarget(){
            var htmTarget = document.getElementsByTagName("head");          

            if ((undefined != htmTarget) && (0 < htmTarget.length)) {
                var b = htmTarget[0].getElementsByTagName("base");
                if ((undefined != b) && (0 < b.length)) {
                    b[0].target = "download";
                }
            }
        }

        function SetSelfTarget(obj){
            if(typeof(obj.defaultValue)!="undefined" && obj.defaultValue!="打印")
            {
                var htmTarget = document.getElementsByTagName("head");          

                if ((undefined != htmTarget) && (0 < htmTarget.length)) {
                    var b = htmTarget[0].getElementsByTagName("base");
                    if ((undefined != b) && (0 < b.length)) {
                        b[0].target = "_self";
                    }
                }
            }
        }
    </script>

 这样基本可以完美解决,在ie下使用showModalDialog模式窗体导出文件流看不到下载页面的问题。因为是维护的老系统所以没办法,只能凑活使用这种方式解决问题;现在一般都使用div模拟弹出窗体,单位现在用easyui,有希望一块研究的,留言

posted @ 2012-11-19 13:46  IT-Chris  阅读(322)  评论(0)    收藏  举报