2012-04-11 58 views
3

如標題所示,如何清除客戶端上的Outputcache?我有幾個Ajax調用需要在用戶執行某些特定操作後清除。在客戶端清除outputcache

我想:

Response.RemoveOutputCacheItem(Url.Action("Action", "Controller")); 

但沒有奏效。

我甚至試圖碼的手動終止它(儘管這將是一個不錯的辦法):

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

這並沒有太大制定。我想使用OutputcacheLocation = Client。如果我將它設置爲Server上面的示例完美無缺地工作。

回答

3

如果您需要的是每次儘管緩存都會返回不同數據的axax調用,但使用相同參數調用時,唯一可靠的方法是在查詢字符串中添加一個總是不同的變量,例如,時間降至毫秒。

這裏是我如何做到這一點(參數no_cache):

<script type="text/javascript"> 
Date.prototype.getTicksUTC = function() 
{ 
    return Date.parse(this.toUTCString()) + this.getUTCMilliseconds(); 
} // End Function getTicksUTC 


Date.prototype.getTicksGMT = function() 
{ 
    return Date.parse(this.toGMTString()) + this.getMilliseconds(); 
} // End Function getTicksGMT 

var strURL= "http://localhost/ajax/whateverhandler.ashx?param1=value1&para2=value2&paraN=valueN&no_cache=" + new Date().getTicksUTC(); 
alert(strURL); 

</script> 
+0

但這不同於將其定義爲NoCache?有沒有辦法告訴客戶端瀏覽器清除緩存? – AdrianoRR 2012-04-11 17:14:09

+0

@AdrianoRR:不,它不會是一樣的。首先,客戶端可以忽略NoCache。其次,其他一切仍然被緩存,而不是ajax調用。 – 2012-04-13 16:31:45

+1

我明白你的意思,但我想清除客戶端上的一些特定操作後的緩存。從你的例子來看,我不會在那個Ajax調用上獲得緩存,因爲你正在設置一個不斷變化的時間戳。我相信這幾乎是jQuery的$ .ajax所做的。我需要將緩存保留一段時間,並在我告訴之後將其清除。無論如何,謝謝 – AdrianoRR 2012-04-13 21:01:11

-2

你不能。一旦您將緩存位置設置爲客戶端,您已賦予客戶端管理它的責任。

+0

如果是的話,你會如何根據不同用戶更改緩存,仍然允許他們改變的數據? – AdrianoRR 2012-04-11 14:53:27

+2

您能否提供一些參考資料,從您讀取的位置可以看出,客戶端的緩存無法通過HttpResponse告知被清除?感謝 – AdrianoRR 2012-04-13 21:02:06