2011-06-13 53 views
3

今天从我的老板那里得到了一个非常有趣的。我们有一个使用Microsoft.Reporting.WebForms.ReportViewer组件的asp网站,一切都非常可爱。但是,如果浏览器(目前使用IE9进行测试)设置为始终使用缓存页面(工具 - > Internet选项 - >常规选项卡 - >浏览历史 - >设置 - >检查更新版本的存储页面 - >从不)对于一些被遗弃的原因,浏览器总是使用缓存的报告。微软,你可以用他们做什么。报告服务|停止缓存

需要说明的是,报告中有一些参数由用户输入,它在第一次正确运行。如果用户随后更改参数并再次单击查看报告,则屏幕会闪烁并显示所有内容,就好像它正在生成新报告一样,但会显示相同的报告(即,原始参数将再次用于生成报告而不是新的那些)。参数输入的文本框(rdl的一部分)保存正确的值,它只是报告本身不更新它们。

我尝试添加下面的JavaScript,其承载的ReportViewer控件的页:

<% 
    Response.Cache.SetNoStore(); 
    Response.Expires = 0; 
    Response.CacheControl = "no-cache"; 
    %> 

和下面的C#托管页面的Page_Load中功能:

 this.Response.Cache.SetNoStore(); 
     this.Response.Expires = 0; 
     this.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); 
     this.Response.AddHeader("pragma", "no-cache"); 
     this.Response.AddHeader("cache-control", "private"); 
     this.Response.CacheControl = "no-cache"; 

没有成功。有谁知道如何强制浏览器更新,尽管浏览器的历史设置?

+3

真正的问题是谁在正确的思想使用'检查存储页面的更新版本 - >从不' – Earlz 2011-06-13 16:59:05

回答

1

假设您使用GET来生成报告,您所要做的就是使URL唯一。我通常通过使用DateTime.Now.Ticks

因此,当您更改参数时,只需在查询字符串中添加一个额外的参数(理论上也应该使用POST)。类似于url+="&timestamp="+DateTime.Now.Ticks

+0

我没有使用GET或POST。第一次调用报告时,它使用报表查看器的refresh()方法,但之后我在报表视图控件中按下查看报表按钮,并且它根本不通过我的代码... – Patrick 2011-06-14 08:57:44

+0

@Pat啊,那我不确定 – Earlz 2011-06-14 14:14:17

3

将“rs:ClearSession = true”添加到查询中对我有帮助。 取自here