Response.Clear();
        Response.ContentType = "application/octet-stream";
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
        //这里的filename可以输出时自定义,不一定用原来的.
        Response.TransmitFile(filePath_ystp);
        Response.Flush();
        Response.Close();
上面这段是弹出保存文件对话框,保存文件后页能不能刷新,请问,怎么做使父页面刷新,请高手帮忙..

解决方案 »

  1.   

    是不是应该
    Response.Close(); 
    后transfer到其它页面去。
      

  2.   

     不能用客户端控件来触发弹出框(如用<a onclik="show()">/</a>),因为这样子的话得不到刷新页面的机会。
    执行的顺序将是:父页面的pageload -》子页面的pageload-》子页面关闭按钮的事件对应处理方法。
      不能直接弹出aspx页面,这样得到父页面,在关闭弹出框时,将会新出一个和弹出页面一样的不是弹出框的页面。解决办法是弹出html页面,在html页面里用ifrmae嵌入aspx页面示例
    <iframe id="ifm"  width="100%" height="100%"></iframe>。
    这里就需要用js处理从父页面传来的参数了
    方法是先在html里面取得参数,然后结合url给iframe的src赋值实例代码:
     <script type="text/javascript">
           function SeIfmtUrl()
           {
            var str=location.href.toString().toLowerCase();   //获得浏览器地址栏URL串
            var num=str.indexOf("?")
            str=str.substr(num);   //截取“?”后面的参数串
            var ifm=document.getElementById("ifm");
            ifm.src="ProductList.aspx"+str;
           }
        </script>在加载完成之后即在body之前再执行方法
    </body>
    <script type="text/javascript">
     SeIfmtUrl();
    </script>
    。对于子页面关闭并处理业务的按钮,在处理完成之后
    执行 Response.Write("<script>window.close()</script>");
    示例:protected void Button3_Click1(object sender, EventArgs e)
            {
                //do what you want
                Response.Write("<script>window.close()</script>");
            }
    下面给出父页面的关键示例:
    弹出模式对话框
     <script type="text/javascript">
        function ShowModel(id)
        {
           window.showModalDialog('HTMLPage1.htm?id='+id,'','dialogWidth:35;dialogHeight:20');
          
        }
        </script>父页面触发弹出框的button设置
    <asp:Button ID="Button2"  runat="server" CommandName="D"  %>' Text="弹出" OnClientClick="ShowModel('100');"/>
    button设置下面的示例是button在gridview中,注意那个commandname,是为了唤醒服务器处理click事件,不然父页面得不到执行,或者是执行的顺序不是先子页面处理完毕再处理父页面。 
      

  3.   

    4楼方法不行..我试过了..我用asp.net 代码  Response.Flush();这句弹出下载文件对话框,
    Response.Write(" <script>window.close() </script>"); 
    放在后面不起作用 还有没有别的方法
      

  4.   

    关闭窗口刷新父页面
    this.Response.Write(" <script language='javascript'>window.opener.location.reload();window.close(); </script>");
      

  5.   

    this.Response.Write(" <script language='javascript'>window.opener.location.reload();window.close(); </script>"); 
    这句代码是跑了..但在父页面 一些控件的值没有刷新,还没有别的方法
      

  6.   


    对父窗体的控件在重新绑定一下就可以了具体:
    在父窗体的.aspx页面加:
    <input id="HiddenRefresh" name="HiddenRefresh" style="width: 1px" type="hidden" />
    在父窗体的.aspx.cs页面加:    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //绑定数据,如this.Bind_Data();
            }
            else
            {
                //操作返回刷新
                if (Request.Form["HiddenRefresh"] != null)
                {
                    if (Request.Form["HiddenRefresh"].ToString() == "pleasefresh")
                    {
                        //绑定数据this.Bind_Data();
                    }
                }
            }
        }然后用这个就能够实现操作后的刷新父窗体了:
    this.Response.Write(" <script language='javascript'>window.opener.form1.HiddenRefresh.value = 'pleasefresh'; window.opener.form1.submit();setTimeout('window.close()',100); </script>");