using System; using System.Web; using System.Web.Caching; using System.Web.Mvc; using System.Web.Mvc.Html; using Umbraco.Core; using umbraco.cms.businesslogic.web; using Umbraco.Core.Cache; namespace Umbraco.Web { /// /// Extension methods for the cache helper /// public static class CacheHelperExtensions { public const string PartialViewCacheKey = "Umbraco.Web.PartialViewCacheKey"; /// /// Outputs and caches a partial view in MVC /// /// /// /// /// /// /// used to cache the partial view, this key could change if it is cached by page or by member /// /// public static IHtmlString CachedPartialView( this CacheHelper cacheHelper, HtmlHelper htmlHelper, string partialViewName, object model, int cachedSeconds, string cacheKey, ViewDataDictionary viewData = null) { //disable cached partials in debug mode: http://issues.umbraco.org/issue/U4-5940 if (htmlHelper.ViewContext.HttpContext.IsDebuggingEnabled) { // just return a normal partial view instead return htmlHelper.Partial(partialViewName, model, viewData); } return cacheHelper.RuntimeCache.GetCacheItem( PartialViewCacheKey + cacheKey, () => htmlHelper.Partial(partialViewName, model, viewData), priority: CacheItemPriority.NotRemovable, //not removable, the same as macros (apparently issue #27610) timeout: new TimeSpan(0, 0, 0, cachedSeconds)); } /// /// Clears the cache for partial views /// /// public static void ClearPartialViewCache(this CacheHelper cacheHelper) { cacheHelper.RuntimeCache.ClearCacheByKeySearch(PartialViewCacheKey); } } }