在MVC 6中从DB渲染视图

时间:2015-04-07 20:18:37

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

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

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

UPD: 以下是我正在寻找的代码示例:

   public IActionResult Index()
    {

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

        return GetViewFromString(htmlContent);
    }

问题是:如何实现GetViewFromString功能?

2 个答案:

答案 0 :(得分: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放在那个上面应该会让你走上正确的轨道。

答案 1 :(得分:-1)

刚刚将Azure Blob存储中的商店.cshtml样本发布到GitHub

另请参阅我对此{/ 3>}的another question的回答

基本上你需要创建一个IFileProvider的实现。然后可以通过配置RazorViewEngineOptions

在Startup.cs中注册它
df.max