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

Posted

技术标签:

【中文标题】使用 MVC 渲染具有嵌入式 Razor 变量的动态 HTML【英文标题】:Render dynamic HTML with embedded Razor variables using MVC 【发布时间】:2016-01-04 14:41:27 【问题描述】:

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

只是保存在数据库中的 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.PageSize

但我希望它用 html 块解释 Razor 变量的值,应该如下所示:

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

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

【问题讨论】:

【参考方案1】:

使用这条线。我希望这可能会有所帮助。

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

【讨论】:

嗨@Mukesh Kumar。试过了,好像没什么可悲的。 请检查编辑后的答案。我希望这可能会有所帮助。 我不得不进行一些挖掘并进行了一些更改,但最终您的第二个答案足以让我编写一个完整且有效的解决方案,我也已经发布了该解决方案。谢谢@Mukesh Kumar。 太好了。将其标记为答案,这可能对其他人有所帮助。此外,如果需要其他更改,请编辑答案或让我知道我会这样做。 是的。我用我的详细信息编辑了你的答案。在那里为我节省了很多工作。谢谢!【参考方案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);

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

【讨论】:

以上是关于使用 MVC 渲染具有嵌入式 Razor 变量的动态 HTML的主要内容,如果未能解决你的问题,请参考以下文章

MVC Razor与javascript混编(js中嵌入razor)

Asp.net MVC Razor输出字符串方法(js中嵌入razor)

如何使用 MVC4 和 Razor 设置 javascript 变量

使用 MVC/Razor 传递 C# 变量以用于 Dygraph

ASP.NET MVC 3、Razor 视图和可移植区域

MVC3 razor 获取视图中的浏览器屏幕宽度和高度