【问题标题】:Render view from DB in MVC 6在 MVC 6 中从 DB 渲染视图
【发布时间】:2015-06-12 13:51:51
【问题描述】:

我们正在开发 ASP.NET MVC 6 项目,并且有必要从文件系统源(尤其是 Azure Blob 存储,但并不重要)以外的其他源呈现 Razor 视图。 早期(在 MVC 5 中)可以创建和注册自定义 VirtualPathProvider,它可以从 DB 或资源 DLL 中获取视图内容(例如)。

在 MVC 6 中似乎已经改变了这种方法。有人知道在哪里寻找吗?

更新: 这是我正在寻找的代码示例:

   public IActionResult Index()
    {

        ViewBag.Test = "Hello world!!!";
        string htmlContent = "<html><head><title>Test page</title><body>@ViewBag.Test</body></html>";

        return GetViewFromString(htmlContent);
    }

问题是:如何实现GetViewFromString函数?

【问题讨论】:

  • 您最终找到解决方案了吗?我正在寻找同样的东西

标签: asp.net-mvc razor asp.net-core-mvc


【解决方案1】:

刚刚将 Azure Blob 存储中的 store .cshtml 示例发布到 GitHub

另请参阅我对 another question 的回答

基本上你需要创建一个 IFileProvider 的实现。然后可以通过配置 RazorViewEngineOptions 在 Startup.cs 中注册它

services.Configure<RazorViewEngineOptions>(options =>
{
    options.FileProvider = new AzureFileProvider(Configuration);
});

【讨论】:

  • 感谢@Alexei 的反馈,我现在也写了一些细节
【解决方案2】:

你需要配置一个 ViewLocationExpander:

services.SetupOptions<RazorViewEngineOptions>(options =>
{
    var expander = new LanguageViewLocationExpander(
        context => context.HttpContext.Request.Query["language"]);
    options.ViewLocationExpanders.Insert(0, expander);
});

这里是 LanguageViewLocationExpander 的实现: https://github.com/aspnet/Mvc/blob/ad8ab4b8fdb27494f5dece6f1186acea03f9dd52/test/WebSites/RazorWebSite/Services/LanguageViewLocationExpander.cs

将您的AzureBlobLocationExpander 建立在那个基础上应该会让您走上正轨。

【讨论】:

  • 这并不是我真正想要的(或者至少我是这么认为的)。 ViewLocationExpander 允许您指定 Razor Engine 将在其中查找视图文件的默认文件夹以外的其他文件夹。虽然我需要上面提到的代码(请参阅更新的问题)。
  • 现在我明白了。很抱歉,但我不知道如何做到这一点。我正在查看源代码,看起来并不容易。我能想到的一件事是创建一个临时的 .cshtml 文件,但这是一种 hack,性能不会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多