2012-08-01 75 views
2

我使用OutputCaching其中显示MVC3剃刀---->刷新的OutputCache记录中删除

[OutputCache(Duration = 120, VaryByParam = "empId;page;sort;")] 

的员工记录列表,但是,当我从列表中删除一条记录我的索引页上,因为后缓存,被删除的记录也正在列出,直到Outputcache到期。有一种方法可以在发生删除操作时刷新输出缓存? 我在我的MVC3剃须刀页面上使用这个。

我有我的网页上列出的记录100的每条记录都有一个“删除”按钮来删除特定record.I也是用OutputCaching的页面上,这样的页面加载速度更快。现在

,如果我通过点击删除按钮删除一条记录,由于OutputCaching,甚至被删除的记录也会在页面上,直到输出缓存过期所示。 有没有办法,我可以解决这个问题?

有没有一种方法,我可以从我的输出缓存只删除已删除的记录?

或者如果我正在添加一条新记录,我不想删除OutputCache并重新创建该缓存,而是将我的新记录追加到现有的outputCache中?

+0

http://stackoverflow.com/questions/1167890/how-to-program-clear-outputcache-for-controller-action-method – Shyju 2012-08-01 18:42:53

回答

0

你可以尝试追加一个querystring参数到你的url,当你删除一条记录时会破坏缓存吗?这是我用于打破ajax get请求的客户端缓存的常用方法。

然后,只需将该querystring参数添加到您的VaryByParam列表。我只是在本地进行了测试,并且在我的param中发送了一个不同的值,这个值是deletedRecordId时,它能够强制输出缓存中断。

因此,无论何时您完成删除项目并将重定向回列表操作,只要确保在路由值中传递参数(如果使用的是RedirectToAction),则只需创建一个用于路由值的匿名对象以保存你的查询字符串参数缓存清除。它看起来类似这样:

return RedirectToAction("list", "category", new { deletedRecordId = deletedRecordId }); 
+0

有没有办法,我可以只从我的outputCache中删除已删除的记录? – Millar 2012-08-01 20:07:12

+0

我想说,我绝不会说我是服务器级别的asp.net mvc outputcache方面的专家。既然你只是想显示没有记录的更新列表,你将需要重新生成基于现在有效的html。我明白你说的只是从缓存的版本中删除那一部分,但是我真的不知道这是否可能。我几乎不会在动态页面上使用OutputCache,并且当我将它用于高流量页面时。我已经提供了一种方法让您的操作再次被点击,并且您的页面可以反映删除。 – JustinMichaels 2012-08-01 20:20:10

0

在控制器或页面加载代码中使用:

HttpContext.Cache.Insert("Record"+ recordid, 1); 
Response.AddCacheItemDependency("Record"+ recordid); 

在记录的删除方法使用

HttpContext.Cache.Remove("Record"+ recordid);