在Response.End()之后刷新页面内容

时间:2011-12-30 11:39:13

标签: c# asp.net .net

我有一段代码可以动态生成csv文件。用户单击按钮,我准备字符串,然后我这样做:

MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(sb.ToString()));
Response.Clear();
Response.ContentType = "Application/csv";
Response.AppendHeader("content-disposition", String.Format("attachment; filename={0}.csv", fileName.ToString()));
Response.BinaryWrite(stream.ToArray());
Response.End();

然后提示用户下载或保存新生成的文件。 问题是,在此之后我必须刷新页面中的一些数据。在Response.End之后,这是不可能的。

关于如何克服这个问题的任何想法?

2 个答案:

答案 0 :(得分:4)

这是一个常见问题,有很多方法可以解决这个问题,这些方法都归结为需要为您的服务器创建两个单独的请求。第一个将请求您的CSV,第二个将请求您刷新。

考虑到这一点,很明显你可以:

  • 让用户创建两个请求(通过单独点击两个链接)
  • 当用户只点击一次
  • 时,使用javascript创建两者

因此,例如,引发CSV下载的链接也可以调用javascript函数,这会导致数据刷新。通常的方法是使用OnClientClick调用一些将刷新数据的javascript。

但是,您可以根据自己的应用决定最佳前进方式。

答案 1 :(得分:3)

也许点击按钮会在新窗口中将用户重定向到处理程序(ashx),这将返回流/提示用户保存文件?

-OR -

首先更新内容,然后将文件发送给用户。