加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC从数据库加载Razor视图

发布时间:2020-12-16 00:46:14 所属栏目:asp.Net 来源:网络整理
导读:ScottGu提到,我们应该能够到 load a Razor view from a database(查看评论部分),有没有人有这样做的例子? 谢谢。 解决方法 您可能需要检查 Pulling a View from a database rather than a file或 Using VirtualPathProvider to load ASP.NET MVC views fr
ScottGu提到,我们应该能够到 load a Razor view from a database(查看评论部分),有没有人有这样做的例子?

谢谢。

解决方法

您可能需要检查 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());

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读