我正在做一些使用便攜式區域的開發工作,因此我有一個重寫的VirtualPathProvider
。ASP.NET MVC在重寫的VirtualPathProvider中禁用視圖緩存
我的public override bool FileExists(string virtualPath)
似乎每隔幾分鐘纔會被調用,這意味着MVC緩存視圖。
這可能是偉大的生產,但我無法弄清楚如何在開發中關閉它。我希望VirtualPathProvider
能夠在視圖的每次使用中得到調用。
有什麼建議嗎?
我正在做一些使用便攜式區域的開發工作,因此我有一個重寫的VirtualPathProvider
。ASP.NET MVC在重寫的VirtualPathProvider中禁用視圖緩存
我的public override bool FileExists(string virtualPath)
似乎每隔幾分鐘纔會被調用,這意味着MVC緩存視圖。
這可能是偉大的生產,但我無法弄清楚如何在開發中關閉它。我希望VirtualPathProvider
能夠在視圖的每次使用中得到調用。
有什麼建議嗎?
回答我的問題,爲子孫後代着想....
我們結束了重寫GetCacheDependency通話,以確保該視圖不會被緩存。 (我們手動緩存視圖)。我們必須創建一個FakeCacheDependency,它允許我們使用緩存中的最後修改日期。
在我們的應用程序中,我們的虛擬視圖被稱爲CondorVirtualFiles。 (當建立一個視圖引擎,你需要給它一個很酷的名字。)
public override System.Web.Caching.CacheDependency GetCacheDependency(string virtualPath, System.Collections.IEnumerable virtualPathDependencies, DateTime utcStart)
{
var view = this.GetFile(virtualPath);
if (view is CondorVirtualFile)
{
FakeCacheDependency fcd = new FakeCacheDependency((view as CondorVirtualFile).LastModified);
return fcd;
}
return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
public class FakeCacheDependency : System.Web.Caching.CacheDependency
{
public FakeCacheDependency(DateTime lastModified)
{
base.SetUtcLastModified(lastModified);
}
public FakeCacheDependency()
{
base.SetUtcLastModified(DateTime.UtcNow);
}
}
+1謝謝!只是想分享一些想法。你也必須重寫'GetFileHash()'方法。你也可以返回'null'而不是'FakeCacheDependency'實例。我找到了一個有用的資源:http://blog.rocketbase.co.uk/2011/04/asp-net-mvc-virtual-path-provider/ – Warlock
你確定這是MVC是的緩存的觀點,而不是瀏覽器? ctrl-F5查看你的視圖是否被調用。 –
感謝您的問題和答案,它解決了我在DLL中查看視圖時相當惱人的緩存問題! –