Я пытаюсь очистить кеш для определенной версии моего представления (частичное представление).
В основном:
- У меня есть
Tools
контроллер с Test()
действием, которое принимает два параметра (код ниже)
- Это действие имеет декоратор OutputCache
- Другое действие внутри
Tools
- это ClearCacheItem()
, которое, как предполагается, очищает кэш для данного ключа элемента кэша
- В некотором представлении (скажем)
Index.cshtml
Я выполняю рендеринг
Как получить ключ элемента кэша для известной комбинации параметров действия Test ()? Я пробовал, как показано ниже, но это не влияет на элементы кэша, которые я могу проверить:
// get url for action
var url = Url.Action("Test", new { name = ViewBag.Name, ident = ViewBag.Id });
// get url to cache clear action with passing Test() action url as cache item key. I call this url on browser (with no effect - cache not touched).
var cacheClearAction = Url.Action("ClearCacheItem", new { cachePath = url });
код:
// ToolsController.cs
public class ToolsController
{
[OutputCache(Duration = 60 * 60 * 24, VaryByParam = "*")]
public ActionResult Test(string name, int ident)
{
ViewBag.Name = name;
ViewBag.Id = ident;
return View();
}
public ActionResult ClearCacheItem(string cachePath)
{
Response.RemoveOutputCacheItem(cachePath);
return Content("cache item cleared for: " + cachePath);
}
}
// Test.cshtml
@{
Layout = null;
var url = Url.Action("Test", new { name = ViewBag.Name, ident = ViewBag.Id });
var cacheClearAction = Url.Action("ClearCacheItem", new { cachePath = url });
}
<!-- CustomModule: @url, cached: @DateTime.Now, cacheClear: @cacheClearAction -->
// Index.cshtml
@Html.Action("Test", "Tools", new { area = "Common", name = "Test1", ident = 1 })