UpdatePanel 中下载失败的解决办法

当在UpdatePanel中进行文件下载操作时遇到无响应,原因是UpdatePanel将下载视为JavaScript操作导致失败。解决方案是创建一个新的Download.aspx页面,通过Session传递文件路径和新文件名,实现在新页面中进行下载。使用Session避免了文件名被特殊字符替换的问题。
摘要由CSDN通过智能技术生成

问题是这样的,有一组供下载的文件绑定的gridview,因为有分页所有在gridview外面加了一个UpdatePanel,这样可以实现无刷新的页面切换,但是这样以前可以正常实现的下载操作这里就没有响应了。通过在网上查看资料,我理解的大概原因是因为UpdatePanel导致程序吧这里的下载操作理解为一段javascript操作,而javascript又无法解析这里的下载操作,于是就失败了。

下面说重点,解决方案:

1.添加一个新的页面Download.aspx

2.将要下载的文件的路径传和新的文件名过来,在这个页面中实现下载操作。

需要补充的是刚开始我通过QueryString传的参数,这样如果新文件名中包含类似“+,#,...”这种地方就会用空格代替,结果我刚好有一个新文件名叫《C++XXX》结果,下载下来的文件叫《C  XXX》!这不是有歧义么,于是我用Session来传值,这个问题得到了果断的解决。

贴一下关键代码吧!

Session["filename"] = _myfile.Filename;
Session["filepath"] = _myfile.Filepath;
Response.Redirect("Download.aspx");  
这里是有UpdatePanel页面中的代码。这里是得到要下载的文件的路径,和下载后的文件名,存在Session里面。

这里是新的Download.aspx页面中的代码。

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["filename"]!=null&&Session["filepath"]!=null)
          {
              string name = Session["filename"].ToString();
                    string path = Session["filepath"].ToString();
                    downloadfile(path, name);
          }
          else
          {
                Response.Redirect("index.aspx");
          }           
}
//下载函数
protected void downloadfile(string path,string name) 
{
    string fileName = name;
            string filePath = path;
          FileInfo fileInfo = new FileInfo(filePath);
          Response.Clear();
          Response.ClearContent();
          Response.ClearHeaders();
          Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
          Response.AddHeader("Content-Length", fileInfo.Length.ToString());
          Response.AddHeader("Content-Transfer-Encoding", "binary");
          Response.ContentType = "application/octet-stream";
          Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
          Response.WriteFile(fileInfo.FullName);
          Response.Flush();
          Response.End();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值