我有一些编码的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
真的坚持这一点,所以任何帮助将不胜感激!
答案 0 :(得分:5)
使用此行。我希望这可能有所帮助。
@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 ,使用程序包管理器控制台命令:
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);
}
答案 1 :(得分:2)
您可以使用Razor编译器,该编译器允许您使用名为RazorEngine的HTML模板,该模板位于https://github.com/Antaris/RazorEngine
从 Visual Studio ,使用程序包管理器控制台命令:
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 ,他提供了重写代码的重要线索,我在此处发布了完整且有效的答案。