使用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
真的卡住了,所以任何帮助都会很感激!
使用这一行。我希望这对你有帮助。
@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,他提供了重要的线索来重写代码,我在这里发布了一个完整的和有效的答案。