2011-03-14 40 views
5

我正在做一些使用便攜式區域的開發工作,因此我有一個重寫的VirtualPathProviderASP.NET MVC在重寫的VirtualPathProvider中禁用視圖緩存

我的public override bool FileExists(string virtualPath)似乎每隔幾分鐘纔會被調用,這意味着MVC緩存視圖。

這可能是偉大的生產,但我無法弄清楚如何在開發中關閉它。我希望VirtualPathProvider能夠在視圖的每次使用中得到調用。

有什麼建議嗎?

+0

你確定這是MVC是的緩存的觀點,而不是瀏覽器? ctrl-F5查看你的視圖是否被調用。 –

+0

感謝您的問題和答案,它解決了我在DLL中查看視圖時相當惱人的緩存問題! –

回答

6

回答我的問題,爲子孫後代着想....

我們結束了重寫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); 
     } 
    } 
+0

+1謝謝!只是想分享一些想法。你也必須重寫'GetFileHash()'方法。你也可以返回'null'而不是'FakeCacheDependency'實例。我找到了一個有用的資源:http://blog.rocketbase.co.uk/2011/04/asp-net-mvc-virtual-path-provider/ – Warlock