2011-06-14 49 views

回答

7

检出OutputCache属性的VaryByParam属性。

[OutputCache(Duration=int.MaxValue, VaryByParam="id")] 
public ActionResult Details(int id) 
{ 
} 

对于每个唯一的id值,将创建一个唯一的缓存实例。

编辑:

如果你的缓存需求超越简单的VaryByParam场景再看看VaryByCustom是。这将允许您按照您认为合适的方式设置场景(缓存版本用于登录与未登录用户等等)。

+0

如果我的参数是一个具有多个属性的对象,它会工作吗? – leora 2011-06-14 11:42:28

+0

你可以但有一些副作用,你应该知道。看到这个帖子例如:http://stackoverflow.com/questions/5144592/partial-page-caching-and-varybyparam-in-asp-net-mvc-3所以你可以传递一个对象,并做VaryByParam =“*”例如,但最后,建议(或我的观点,我应该说)是有一些独特的原始值或一组可用的基元。 – Khepri 2011-06-14 14:20:01

+0

感谢您的链接。在示例链接中澄清,只要Ids匹配,该部分页面是否会被缓存。如果他们的ID匹配但内容的属性发生了变化呢?这仍然会产生缓存的结果。如果是这样,那不是我想要的。我希望缓存与每个唯一对象进行1:1映射。我想我可以用重写对象上的ToString()作为一个唯一的字符串分解字符串的所有属性。这应该工作,对吗? – leora 2011-06-15 11:08:11

相关问题