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

本文关键字:变量 Razor 动态 HTML 嵌入式 MVC 使用 | 更新日期: 2023-09-27 18:16:40

我有一些编码的Html,其中有1000个不同的Razor变量嵌入其中,我已经存储并需要从数据库检索。我希望能够渲染这在MVC/剃刀视图。

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

"<span>Your page is @Config.PageColour and you have page size of @Config.PageSize</span>"

MessageController.cs

public ActionResult ShowMessage()
{
    var htmlToDisplay = _messageDAL.getHtmlMessage();
    var messageVm = new MessageVm
    {
        DisplayMessage = htmlToDisplay;
    };
    return View("Index.cshtml", "", messageVm);
}

Index.cshtml

<html>
    @Html.Raw(@model.DisplayMessage)
</html>
结果

当我运行这个时,渲染的页面看起来像这样:

您的页面是@Config。PageColour,你有页面大小@Config。页大小

但是我想让它用html块来解释Razor变量的值,应该是这样的:

您的页面是Blue,您的页面大小为 A4

真的卡住了,所以任何帮助都会很感激!

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

使用这一行。我希望这对你有帮助。

@Html.Raw(System.Web.HttpUtility.HtmlDecode(@model.DisplayMessage))

编辑1

你可以使用下面提到的任何Razor编译器

RazorEngine :

string result = RazorEngine.Razor.Parse(@model.DisplayMessage, new { Name = "Name" });

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

编辑2

你可以使用Razor编译器,它允许你使用名为RazorEngine的HTML模板,可以在https://github.com/Antaris/RazorEngine

找到。

Visual Studio,使用Package Manager Console命令:

Install-Package RazorEngine

安装后,我改变了我的控制器如下:

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);
}

你可以使用Razor编译器,它允许你使用名为RazorEngine的HTML模板,该模板可以在https://github.com/Antaris/RazorEngine

找到。

Visual Studio,使用Package Manager Console命令:

Install-Package RazorEngine

安装后,我改变了我的控制器如下:

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);
}

第一次就成功了。非常感谢@Mukesh Kumar,他提供了重要的线索来重写代码,我在这里发布了一个完整的和有效的答案。