C# 如何从数据库加载一些视图,从MVC4中的文件加载其他视图
我有一个web应用程序可以从文件中加载_布局和正常页面视图,现在我尝试使用VirtualPathProvider和重写的VirtualFile从数据库中加载部分视图:C# 如何从数据库加载一些视图,从MVC4中的文件加载其他视图,c#,asp.net-mvc-4,virtualpathprovider,C#,Asp.net Mvc 4,Virtualpathprovider,我有一个web应用程序可以从文件中加载_布局和正常页面视图,现在我尝试使用VirtualPathProvider和重写的VirtualFile从数据库中加载部分视图: public class RavenDbPathProvider : VirtualPathProvider { public override bool FileExists(string virtualPath) { if (!virtualPath.StartsWith("TextContents/
public class RavenDbPathProvider : VirtualPathProvider {
public override bool FileExists(string virtualPath) {
if (!virtualPath.StartsWith("TextContents/")) return false;
using (var session = ObjectFactory.GetInstance<IDocumentSession>()) {
return session.Query<TextContent>().Any(w => w.Id == virtualPath);
}
}
public override VirtualFile GetFile(string virtualPath) {
if (!virtualPath.StartsWith("TextContents/"))
return base.GetFile(virtualPath);
return new RavenDbVirtualFile(virtualPath);
}
}
然而,当我注册RavendBathProvider时,它似乎被用于所有视图查找
是否可以注册多个VirtualPathProviders,以便在磁盘上找不到视图时,在数据库中继续搜索
如果没有,是否有人成功地完成了类似的操作?是否希望
FileExists
方法也调用(并返回)基FileExists
,如果它不在TextContents
中?是的,这是正确的。我改为返回基本实现,并进一步进行了几步。我还需要修改虚拟路径以实际查找视图,但之后我就回家了。谢谢
HostingEnvironment.RegisterVirtualPathProvider(new RavenDbPathProvider());