ASP.NET MVC从数据库加载Razor视图
ScottGu提到,我们应该可以从数据库加载Razor视图 (查看注释部分),那么有没有人有一个如何做到这一点的例子?
谢谢。
您可能想要检查从数据库而不是文件拉视图,或者使用VirtualPathProvider从DLL加载ASP.NET MVC视图
以我之前关于这个问题的问题的代码。
在另一个页面上的FileExists()
方法中,用一些实际检查FileExists()
是否在数据库中有条目的数据库代码replace我在那里的testing代码。 你的数据库看起来像这样:
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)); } }
如果你不想要虚拟path,virtualPath不必对应一个真正的文件系统。 您可以通过实现这两个类来覆盖function。
然后,您可以像这样在global.asax中注册新的VirtualPathProvider
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
我希望这能更好地回答你的问题。