2010-09-19 157 views
8

我已经实现了一个VirtualPathProvider。 VirtualPathProvider从文件系统读取视图。每次请求ASP.NET MVC 2 VirtualPathProvider GetFile

但是我的问题是每次请求都不会执行每次都执行的方法GetFile(string virtualPath)。我认为这与缓存有关,不是吗?我想要的是每次获取文件的每个请求。因为在某些情况下,文件系统中的页面将被修改,并且用户希望系统立即显示更改。

谢谢。

+0

每次处于调试模式时,您的提供者都会被调用吗?如果是这样,那么它就是缓存,因为启用调试时禁用视图缓存。 – Clicktricity 2010-09-20 22:03:59

+0

谢谢你的回应。每个请求都会调用VirtualPathProvider,但每个请求只调用“bool FileExists(string virtualPath)”方法。我试图覆盖VirtualPathProvider中的所有方法,但我仍然找不到解决方案。 – 2010-09-22 04:06:35

+0

实际上,我只是直接从http://padcom13.blogspot.com/2009/04/virtualpathprovider-example.html运行一个示例。 – 2010-09-22 04:11:46

回答

15

我自己在互联网上找到了解决方案。

真的很感谢jbeall回复于07-15-2008,11:05 AM。

http://forums.asp.net/t/1289756.aspx

总而言之一句话,覆盖下面的方法

  1. GetCacheDependency - 总是返回null
  2. GetFileHash - 始终返回不同的值

这些修改后,为每个请求,MVC直接从源文件获取文件。

0
public class MyVirtualPathProvider : VirtualPathProvider 
{ 

    public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart) 
    { 
     return null; 

    } 

    public override String GetFileHash(String virtualPath, IEnumerable virtualPathDependencies) 
    { 
     return Guid.NewGuid().ToString(); 

    } 
}