【问题标题】:MVC3 razor ----> Refresh OutputCache after record deletedMVC3 razor ----> 删除记录后刷新 OutputCache
【发布时间】:2012-08-01 18:19:45
【问题描述】:

我在显示员工记录列表的索引页面上使用 OutputCaching

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

但是当我从列表中删除一条记录时,由于缓存,删除的记录也会被列出,直到 Outputcache 过期。 如果发生删除操作,有没有办法刷新输出缓存? 我在我的 MVC3 剃须刀页面上使用它。

我的页面上列出了 100 条记录,每条记录都有一个“删除”按钮来删除该特定记录。我还在页面上使用 OutputCaching,以便页面加载更快。

现在,如果我通过点击删除按钮删除一条记录,由于 OutputCaching,即使已删除的记录也会显示在页面上,直到 outputcache 过期。 有没有办法解决这个问题?

有没有办法,我可以只从我的 outputCache 中删除已删除的记录?

或者如果要添加新记录,我不想删除 OutputCache 并再次重新创建缓存,而是想将我的新记录附加到现有的 outputCache?

【问题讨论】:

标签: asp.net-mvc-3 razor outputcache


【解决方案1】:

您可以尝试将查询字符串参数附加到您的 url,当您删除记录时会破坏缓存?这是我用来打破 ajax 获取请求的客户端缓存的常用方法。

然后只需将该查询字符串参数添加到您的 VaryByParam 列表中。我刚刚在本地对此进行了测试,并且能够在我的参数中发送一个不同的值时强制输出缓存中断,该值已被删除RecordId。

因此,每当您完成删除项目并即将重定向回列表操作时,只需确保在使用 RedirectToAction 的路由值中传递参数,然后只需为路由值创建一个匿名对象来保存您的用于缓存破坏的查询字符串参数。它看起来类似于:

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

【讨论】:

  • 有没有办法,我可以只从我的 outputCache 中删除已删除的记录?
  • 首先我想说我绝不是服务器级别的 asp.net mvc outputcache 方面的专家。由于您只想显示没有该记录的更新列表,因此您需要根据现在有效的内容重新生成 html。我理解你所说的只是从你已经拥有的缓存版本中删除那一块,但老实说我不知道​​这是否可能。我很少在动态页面上使用 OutputCache,而当我使用它时,它是用于高流量页面的。我已经为您的操作提供了一种再次被点击的方法,并且您的页面可以反映删除。
【解决方案2】:

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

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

在记录删除方法中使用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2014-02-18
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多