我有一些编码的 Html,其中嵌入了任意数量的 1000 个不同的 Razor 变量,我已经存储这些变量并需要从数据库中检索。我希望能够在 MVC/razor View 中呈现它。
只是保存在数据库中的 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>
结果
当我运行它时,呈现的页面如下所示:
Your page is @Config.PageColour and you have page size of @Config.PageSize
但我希望它用 html block 解释 Razor 变量的值并且应该如下所示:
Your page is Blue and you have page size of
A4
真的坚持这一点,所以任何帮助将不胜感激!
最佳答案
使用这一行。我希望这可能有所帮助。
@Html.Raw(System.Web.HttpUtility.HtmlDecode(@model.DisplayMessage))
编辑 1
您可以使用下面提到的任何 Razor 编译器
Razor 引擎:
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
安装后我改变了我的 Controller 如下:
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);
}
关于c# - 使用 MVC 渲染带有嵌入式 Razor 变量的动态 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32990996/