UpdatePanel 中下载失败的解决办法
2013-04-26 17:09
295 查看
问题是这样的,有一组供下载的文件绑定的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();
}
下面说重点,解决方案:
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();
}
相关文章推荐
- 在ASP.net中的UpdatePanel,弹窗失败解决办法
- Android SDK下载和更新慢或失败的解决办法
- C#中关于updatePanel与freeTextBox不兼容的问题 当页面刷子新后,ftb不能输入内容的解决办法
- App store 下载软件失败的解决办法总结
- UpdatePanel中关于Response.Write、Response.Redirect和Server.Transfer的解决办法
- gradle下载更新依赖库失败的解决办法 - 依赖库下载加速1000%
- APK Downloader 下载失败解决办法
- Android SDK下载/更新失败的解决办法
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- updatepanel 与 fileupload控件不能一起用?获取不到值(解决办法)
- mysql-workbench工具update(更新)失败的解决办法
- updatepanel 中按钮下载文件出错解决
- 在使用UpdatePanel时JS对话框出错的解决办法
- 使用updatepanel后,javascript失效的解决办法
- Ubuntu系统 apt-get update失败解决办法
- Genymotion下载慢或者下载失败的解决办法
- 关于ubuntu“下载软件仓库信息失败 检查您的网络连接“问题的解决办法
- mysql-workbench工具update(更新)失败的解决办法