Question

The ViewEngine in ASP.Net MVC 3 caches the physical paths of the views and partial views which is causing errors when I add or move view files in my production environment. Is there a way I can clear that cache at runtime? I found one article online that says that cache is stored in HttpContext.Cache, but I'm not sure which entry it is.

Was it helpful?

Solution

Here's the key used by the Razor view engine:

// System.Web.Mvc.VirtualPathProviderViewEngine
private string CreateCacheKey(string prefix, string name, string controllerName, string areaName)
{
    return string.Format(CultureInfo.InvariantCulture, ":ViewCacheEntry:{0}:{1}:{2}:{3}:{4}:", new object[]
    {
        base.GetType().AssemblyQualifiedName, 
        prefix, 
        name, 
        controllerName, 
        areaName
    });
}

So for example if you wanted to clear the cache location of the Index view for Home controller you would remove the following key from the HttpContext.Cache:

HttpContext.Cache.Remove(":ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:View:Index:Home::");

and for the _LogOnPartial.cshtml partial:

HttpContext.Cache.Remove(":ViewCacheEntry:System.Web.Mvc.RazorViewEngine, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35:Partial:_LogOnPartial:Home::");

You should obviously be aware that you are using a totally undocumented feature that could be changed without any notice and your code could stop working in a future version of ASP.NET MVC.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top