MVCDonutCaching - 如何删除子操作缓存MVC甜甜圈缓存

时间:2015-01-21 07:11:52

标签: c# asp.net-mvc outputcache donut-caching

我正在使用此MVCDonutCaching Nuget package,因为在tutorial中他们说这可能是儿童行为所致。

This question对我不起作用,或者我没有正确理解。

如果有人知道如何使用标准OutputCache属性删除子缓存,那么这也没关系!

我搜索过这个,但我找不到它。看这里的一个例子:

HomeController(主页)的索引操作:

[AllowAnonymous]
public ActionResult Index()
{
   return View();
}

NewsController的ChildAction:

[AllowAnonymous]
[ChildActionOnly]
[DonutOutputCache(Duration = 600, Location = OutputCacheLocation.Server)]
public PartialViewResult LastArticles(int numberOfArticles)
{
    return PartialView("_LastArticles", db.NewsArticles
    .Include(i => i.Tags)
    .Include(i => i.SeoTags)
    .Where(n => n.Status == PublishStatus.Published)
    .OrderByDescending(n => n.PublishDate)
    .Take(numberOfArticles)
    .ToList());
}

HomeController的索引视图:

@{ Html.RenderAction("LastArticles", "News", new { numberOfArticles = 2 }); }

要清除缓存,我的应用程序中有一个 Admin 区域,其中包含一个控制器和操作,以更新子操作存储的数据。所以当新闻文章更新时。缓存应该在主页上刷新。

在该操作中,我有以下代码:

var cacheManager = new OutputCacheManager();
cacheManager.RemoveItem("News", "LastArticles", new { area = "", numberOfArticles = 2 });
cacheManager.RemoveItem("News", "LastArticles", new { area = "" });

我尝试了多个版本,但没有运气。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

我相信你不应该明确定义(空)区域。虽然该区域是路由的重要组成部分,但MVCDonutCaching在定义内部密钥方面做了一些奇怪的事情。也许MVCDonutCache有一个关于区域的错误。