我想使用输出缓存,以避免用相同的静态查询一遍又一遍地打我的数据库,但我的控制器有参数,唯一定义帖子。你可以使用输出缓存在asp.net-mvc基于您的控制器行动的参数
我如何考虑我的参数,并且仍然支持asp.net-mvc中的输出缓存?
我想使用输出缓存,以避免用相同的静态查询一遍又一遍地打我的数据库,但我的控制器有参数,唯一定义帖子。你可以使用输出缓存在asp.net-mvc基于您的控制器行动的参数
我如何考虑我的参数,并且仍然支持asp.net-mvc中的输出缓存?
检出OutputCache属性的VaryByParam属性。
[OutputCache(Duration=int.MaxValue, VaryByParam="id")]
public ActionResult Details(int id)
{
}
对于每个唯一的id值,将创建一个唯一的缓存实例。
编辑:
如果你的缓存需求超越简单的VaryByParam场景再看看VaryByCustom是。这将允许您按照您认为合适的方式设置场景(缓存版本用于登录与未登录用户等等)。
如果我的参数是一个具有多个属性的对象,它会工作吗? – leora 2011-06-14 11:42:28
你可以但有一些副作用,你应该知道。看到这个帖子例如:http://stackoverflow.com/questions/5144592/partial-page-caching-and-varybyparam-in-asp-net-mvc-3所以你可以传递一个对象,并做VaryByParam =“*”例如,但最后,建议(或我的观点,我应该说)是有一些独特的原始值或一组可用的基元。 – Khepri 2011-06-14 14:20:01
感谢您的链接。在示例链接中澄清,只要Ids匹配,该部分页面是否会被缓存。如果他们的ID匹配但内容的属性发生了变化呢?这仍然会产生缓存的结果。如果是这样,那不是我想要的。我希望缓存与每个唯一对象进行1:1映射。我想我可以用重写对象上的ToString()作为一个唯一的字符串分解字符串的所有属性。这应该工作,对吗? – leora 2011-06-15 11:08:11
如何根据多个参数改变? – Zapnologica 2017-04-21 09:57:05