using System; using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Umbraco.Cms.Core.Cache; using Umbraco.Cms.Core.Hosting; using Umbraco.Cms.Core.Web; namespace Umbraco.Extensions { /// /// Extension methods for the cache helper /// public static class CacheHelperExtensions { /// /// 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 IHtmlContent CachedPartialView( this AppCaches appCaches, IHostingEnvironment hostingEnvironment, IUmbracoContext umbracoContext, IHtmlHelper htmlHelper, string partialViewName, object model, TimeSpan cacheTimeout, string cacheKey, ViewDataDictionary viewData = null ) { //disable cached partials in debug mode: http://issues.umbraco.org/issue/U4-5940 //disable cached partials in preview mode: https://github.com/umbraco/Umbraco-CMS/issues/10384 if (hostingEnvironment.IsDebugMode || (umbracoContext?.InPreviewMode == true)) { // just return a normal partial view instead return htmlHelper.Partial(partialViewName, model, viewData); } var result = appCaches.RuntimeCache.GetCacheItem( CoreCacheHelperExtensions.PartialViewCacheKey + cacheKey, () => new HtmlString(htmlHelper.Partial(partialViewName, model, viewData).ToHtmlString()), timeout: cacheTimeout); return result; } } }