一个关于数据导出的问题 希望哪位大侠能帮帮我谢谢了

jinhui402407250 2009-11-27 01:18:54
我在页面上放了一个repeater控件,这个repeater在updatepanel中,我在后台对数据进行了绑定。

protected void exportData_Click(object sender, EventArgs e)
{
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter stringwriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter htmltextWriter = new HtmlTextWriter(stringwriter);
this.ceshi.EnableViewState = false;
this.ceshi.RenderControl(htmltextWriter);

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/ms-txt";
Response.Charset = "GB2312";

this.ceshi.Page.EnableViewState = true;
Response.AppendHeader("Content-Disposition", "online;filename=miller.txt");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

Response.Write(stringwriter.ToString());
Response.Flush();
Response.End();
}
是这样的,但是我点击导出之后也没报错,就是没有看见导出的文件miller.txt,我昨天在搜索的时候发现这些文件页面文件都在缓存中,
这是那些网页缓冲文件的属性
http://www.google.cn/complete/search?hl=zh-CN&pq=Response.AppendHeader(%22Content-Disposition%22%2C%20%22attachment%3Bfilename%3Dmiller.xls%22)%3B&xhr=t&q=%E5%B0%86%E6%95%B0%E6%8D%AE%E6%BA%90%E5%AF%BC%E5%87%BA%E5%88%B0exc&cp=1
...全文
98 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinhui402407250 2009-11-30
  • 打赏
  • 举报
回复
如果我不放在updatePanel中那不数据更加就发不回来了吗?
jinhui402407250 2009-11-30
  • 打赏
  • 举报
回复
我不用updatepanel的话,我的js控件传到<asp:textbox>上的时间就传不到后台去
悔说话的哑巴 2009-11-28
  • 打赏
  • 举报
回复
可以把repeater放到updatePanel外面
liaoyukun111 2009-11-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 takako_mu 的回复:]
updatepanel控件和C#中的Response.Write()有衝突。
把updatepanel控件去掉就可以了。
[/Quote]
UP
周公 2009-11-28
  • 打赏
  • 举报
回复
不要在UpdatePanel控件的触发事件中Response任何东西,除了破坏了XHTML的文档结构之外,还不会产生任何期望的效果。
nosuchtracter 2009-11-28
  • 打赏
  • 举报
回复
不大喜欢用updatePanel这东西
建议换种方式实现这种静态刷新的效果。

如果repeater不需要静态刷新的话,可以把repeater放到updatePanel外面
jshi123 2009-11-28
  • 打赏
  • 举报
回复
最简单的方法是把js的时间控件留在UpdatePanel里面, 把导出按钮放到UpdatePanel外面。

如果导出按钮不能搬到UpdatePanel外面,可以用下面方法在UpdatePanel里面做个“假的”按钮,模拟导出按钮的点击:
1. 把 exportData 按钮放到 UpdatePanel 外面,加上 diplay:none 样式进行隐藏,像这样:
<asp:Button ID="exportData" runat="server" style="display:none" OnClick="exportData_Click" />

2. 把原来放 exportData 按钮的地方,替换成HTML的button
<button onclick="<%= Page.ClientScript.GetPostBackEventReference(exportData, "") %>" >导出</button>

另外还有很多办法,比如把UpdatePanel的ChildrenAsTriggers属性设为false,再手工指定Triggers。还可以在exportData_Click事件中用Response.Redirect重定向到本页,并且加上类似export=true这样的参数,在Page_Load中判断这个参数,如果发现有则执行导出操作,这样就可以从Ajax PostBack中跳出来。

qibao33 2009-11-27
  • 打赏
  • 举报
回复
帮顶
jinhui402407250 2009-11-27
  • 打赏
  • 举报
回复
updatepanel去掉那我用了一个js的时间控件就用不了,那个时间每次都变为了最开始的时间
takako_mu 2009-11-27
  • 打赏
  • 举报
回复
updatepanel控件和C#中的Response.Write()有衝突。
把updatepanel控件去掉就可以了。

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧