使用MVC渲染带有嵌入式Razor变量的动态HTML

Jef*_*tes 6 html c# asp.net-mvc razor asp.net-mvc-4

我有一些编码的Html,其中嵌入了任意数量的1000个不同的Razor变量,我已经存储并需要从数据库中检索.我希望能够在MVC/razor视图中呈现它.

只是保存在数据库上的html的一个简单示例(它可能更复杂):

"<span>Your page is @Config.PageColour and you have page size of @Config.PageSize</span>"
Run Code Online (Sandbox Code Playgroud)

MessageController.cs

public ActionResult ShowMessage()
{
    var htmlToDisplay = _messageDAL.getHtmlMessage();
    var messageVm = new MessageVm
    {
        DisplayMessage = htmlToDisplay;
    };

    return View("Index.cshtml", "", messageVm);
}
Run Code Online (Sandbox Code Playgroud)

Index.cshtml

<html>
    @Html.Raw(@model.DisplayMessage)
</html>
Run Code Online (Sandbox Code Playgroud)

结果

当我运行它时,渲染页面如下所示:

您的页面是@ Config.PageColour,页面大小为@ Config.PageSize

但我希望它用html块解释Razor变量的值,看起来像这样:

您的页面是蓝色的,页面大小为A4

真的坚持这一点所以任何帮助将不胜感激!

Muk*_*mar 5

使用此行。希望对您有所帮助。

@Html.Raw(System.Web.HttpUtility.HtmlDecode(@model.DisplayMessage))
Run Code Online (Sandbox Code Playgroud)

编辑1

您可以使用任何Razor编译器,如下所述

RazorEngine

string result = RazorEngine.Razor.Parse(@model.DisplayMessage, new { Name = "Name" });
Run Code Online (Sandbox Code Playgroud)

RazorEngine不支持任何Mvc帮助程序,例如Html和Url。由于这些库应该存在于Mvc之外,因此需要更多的工作才能与这些帮助程序一起使用。**

编辑2

您可以使用Razor编译器,该编译器允许您使用称为RazorEngine的HTML模板,该模板可在https://github.com/Antaris/RazorEngine中找到。

Visual Studio中,使用“ 程序包管理器控制台”命令:

Install-Package RazorEngine
Run Code Online (Sandbox Code Playgroud)

安装后,我按如下方式更改了控制器:

MessageController.cs

public ActionResult ShowMessage()
{
    var htmlTemplate = _messageDAL.getHtmlMessage();

    var htmlToDisplay = Engine.Razor.RunCompile(htmlTemplate , "messageTemplateKey", null, new { Name = "some model data" });

    var messageVm = new MessageVm
    {
        DisplayMessage = htmlToDisplay;
    };

    return View("Index.cshtml", "", messageVm);
}
Run Code Online (Sandbox Code Playgroud)