2011-06-13 51 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