解决方法
您可能需要检查
Pulling a View from a database rather than a file或
Using VirtualPathProvider to load ASP.NET MVC views from DLLs
从我以前的问题的代码,关于这个问题。
在另一个页面的FileExists()方法中,使用一些实际检查的数据库代码来替换测试代码,以查看virtualPath在数据库中是否有一个条目。你的数据库看起来像:
Views --tablename Path --view's virtual path SomeOtherValue
…然后你的电话会是这样的
public class DbPathProvider : VirtualPathProvider { public DbPathProvider() : base() { } public override bool FileExists(string virtualPath) { Database db = new Database(); return db.Views.Any(w => w.Path == virtualPath); } public override VirtualFile GetFile(string virtualPath) { return new DbVirtualFile(virtualPath); } }
现在我们修改DbVirtualFile
public class DbVirtualFile : System.Web.Hosting.VirtualFile { public DbVirtualFile(string path) : base (path) { } public override System.IO.Stream Open() { Database db = new Database(); return new System.IO.MemoryStream( db.Views.Single(v => v.Path == this.VirtualPath)); } }
如果不想要,virtualPath不必与真实的文件系统相对应。您可以通过实现这两个类来覆盖功能。
然后,您可以在global.asax中注册新的VirtualPathProvider,如此
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
我希望这个更好地回答你的问题。