pbz*_*pbz 20 asp.net-mvc razor
ScottGu提到我们应该能够从数据库加载一个Razor视图(查看评论部分),那么有没有人有一个如何做到这一点的例子?
谢谢.
Bui*_*ted 30
您可能想要检查从数据库而不是文件中拉取视图或使用VirtualPathProvider从DLL加载ASP.NET MVC视图
从我之前关于这个主题的问题中获取代码.
在FileExists()另一个页面上的方法中,用一些db代码替换我在那里的测试代码,这些代码实际上检查虚拟路径是否在数据库中有一个条目.您的数据库看起来像:
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));
    }
}
如果您不想要虚拟路径,则虚拟路径不必与真实文件系统对应.您可以通过实现这两个类来覆盖功能.
然后,您可以在global.asax中注册新的VirtualPathProvider
HostingEnvironment.RegisterVirtualPathProvider(new DbPathProvider());
我希望这能更好地回答你的问题.
| 归档时间: | 
 | 
| 查看次数: | 24149 次 | 
| 最近记录: |