2011-02-10 47 views
20

我正在使用MVC3 - 我有一個JavaScript函數,它使用jQuery get()從控制器獲取PartialView。MVC3 - 正在緩存AJAX部分視圖...我無法阻止它

問題是它正在被緩存,我不斷收回陳舊的內容。

我試過[OutputCache(Duration = 0)]這個動作,認爲它會阻止它緩存,但沒有喜悅。客戶端是否也可以緩存它?

編輯:

我最近一直在用另一種方式來防止緩存可能是一些有用的。

$.get("/someurl?_="+$.now(),function(data) { 
    // process data 
}); 

這顯然不是乾淨,但因爲每個請求通過一個_=12345678(時間戳)它永遠不會緩存。

希望它有幫助。

回答

21

GET請求可以被瀏覽器自動緩存,以便您可以使用.ajax()功能,這違背了.get()功能允許您禁用緩存:

$.ajax({ 
    url: '/foo', 
    type: 'GET', 
    cache: 'false', 
    success: function(result) { 

    } 
}); 

另一種可能性是使用POST:

$.post('/foo', function(result) { 

}); 
19

IE尤其糟糕。您可以通過以下禁用所有AJAX緩存:

$.ajaxSetup({ 
    cache: false 
}); 
+1

這比Darin的方法更好,因爲它允許您仍然使用MVC的Ajax.foo幫助程序方法 – 2011-02-10 20:36:45

+3

這將全局禁用所有AJAX GET請求的情況,這可能不是所需的行爲。 – 2011-02-10 20:38:49

5

感謝你們兩位,類型=仍緩存的第一個「GET」即使緩存:「假」指定。這是使用鉻和本地IIS7。

我結束了

$.ajax({ 
      url: '@Url.Action("GetMyPartialView","MyController")/' + parameterId, 
      type: 'POST', 
      cache: 'false', 
      success: function (result) { 
       $('#dynamicContentDiv').html(result); 
      } 
}); 

做工精細,感謝你的反應。

+0

這是我用IE瀏覽器工作的唯一東西。使用緩存:false不起作用,使用OutputStore屬性不起作用,其他問題的其他答案不起作用。將「[email protected]()。ToString()」添加到URL末尾是唯一有效的工作。 – Matt 2017-08-18 02:12:50

9

默認情況下,所有MVC 3部分視圖都會被自動緩存,但是您可以通過控制器控制每個局部視圖的這種情況,這些視圖是通過屬性返回的(或者在Java中調用註釋時)行動:

[OutputCache(Duration = 0)] 
public ActionResult PersonEdit(string id) 
{ 
    // do query and fill editvm here 
    return PartialView("PersonEdit",editvm); 
} 

所以持續時間設置爲零。可能有許多其他屬性可以設置爲關閉緩存,但到目前爲止,這似乎對我個人有用。