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()); 

我希望这能更好地回答你的问题。