2012-07-23 42 views
3

這是我的控制器方法。任何人都可以解釋我如何在服務器上爲以下方法編寫outputcache。在MVC中使用輸出緩存作爲對象參數

public JsonResult GetCenterByStateCityName(string name, string state, string city, bool sportOnly, bool rvpOnly) 
    { 
     var result = GetCenterServiceClient().GetCentersByLocation(name, city, state, sportOnly, rvpOnly).OrderBy(c => c.Name).ToList(); 
     return Json(result); 
    } 

謝謝

+1

你想緩存一個POST方法? – Shyju 2012-07-23 15:40:21

+0

是的,我想緩存POST方法 – Krishh 2012-07-23 15:48:08

回答

5

你看着的文件?

http://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute.aspx

簡而言之,只需設置屬性上的動作

[OutputCache(CacheProfile = "SaveContactProfile", Duration = 10)] 
public JsonResult SaveContact(Contact contact) 
{ 
    var result = GetContactServiceClient().SaveContact(contact); 
    return Json(result); 
} 

- 更新 -

如果你通過jQuery進行直接Ajax調用, OutPutCache可以基於「cache」參數被忽略 - 默認情況下它被設置爲true。

$.ajax({ 
    url: someUrlVar, 
    cache: true, /* this is true by default */ 
    success : function(data) { 

    } 
}); 

只是要看看,你可以緩存調用方法有兩種:

例如,您的參數是,如果你正在做這樣的事情被忽略。

參考:

+0

謝謝。我現在會試試這個。我們應該設置VaryByParam屬性嗎? – Krishh 2012-07-23 15:46:53

+0

我更新了信息以包含一些關於使用Ajax緩存的關鍵細節。至於你的問題,這裏是一個偉大的文章:http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs – anAgent 2012-07-23 15:54:14

+0

感謝您給我有一個清晰的認識。 – Krishh 2012-07-23 15:59:06

3
[OutputCache(Duration = 3600, VaryByParam = "name;state;city;sportOnly;rvpOnly")] 
public JsonResult GetCenterByStateCityName(string name, string state, string city, bool sportOnly, bool rvpOnly) 
{ 
     var result = GetCenterServiceClient().GetCentersByLocation(name, city, state, sportOnly, rvpOnly).OrderBy(c => c.Name).ToList(); 
     return Json(result); 
} 

Duration值是這裏3600秒。 Sot緩存將有效1小時。您需要提供VaryByParam屬性值,因爲您需要不同參數的不同結果。

+0

VaryByParam =「*」是否適合條件,如果名稱或狀態有變化,它不會從先前緩存的結果中獲取權利? – Krishh 2012-07-23 15:55:20

+1

即使參數是對象,它是否工作? – Krishh 2012-07-23 15:57:23