使用 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 变量