C# 使用MVC呈现带有嵌入Razor变量的动态HTML
我有一些编码的Html,其中嵌入了1000个不同的Razor变量,我已经存储了这些变量,需要从数据库中检索。我希望能够在MVC/razor视图中渲染它 仅举一个保存在数据库中的html的简单示例(可能更复杂): Index.cshtmlC# 使用MVC呈现带有嵌入Razor变量的动态HTML,c#,html,asp.net-mvc,asp.net-mvc-4,razor,C#,Html,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一些编码的Html,其中嵌入了1000个不同的Razor变量,我已经存储了这些变量,需要从数据库中检索。我希望能够在MVC/razor视图中渲染它 仅举一个保存在数据库中的html的简单示例(可能更复杂): Index.cshtml <html> @Html.Raw(@model.DisplayMessage) </html> @Html.Raw(@model.DisplayMessage) 结果 public ActionResult ShowMess
<html>
@Html.Raw(@model.DisplayMessage)
</html>
@Html.Raw(@model.DisplayMessage)
结果
public ActionResult ShowMessage()
{
var htmlToDisplay = _messageDAL.getHtmlMessage();
var messageVm = new MessageVm
{
DisplayMessage = htmlToDisplay;
};
return View("Index.cshtml", "", messageVm);
}
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);
}
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);
}
运行此命令时,呈现的页面如下所示:
您的页面为@Config.pagecolor,页面大小为@Config.PageSize
但我希望它用html块解释Razor变量的值,应该如下所示:
您的页面为蓝色,页面大小为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模板,可在 从Visual Studio,使用软件包管理器控制台命令:
Install-Package RazorEngine
Install-Package RazorEngine
安装后,我对控制器进行了如下更改:
MessageController.cs
public ActionResult ShowMessage()
{
var htmlToDisplay = _messageDAL.getHtmlMessage();
var messageVm = new MessageVm
{
DisplayMessage = htmlToDisplay;
};
return View("Index.cshtml", "", messageVm);
}
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);
}
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模板,可在 从Visual Studio,使用软件包管理器控制台命令:
Install-Package RazorEngine
Install-Package RazorEngine
安装后,我对控制器进行了如下更改:
MessageController.cs
public ActionResult ShowMessage()
{
var htmlToDisplay = _messageDAL.getHtmlMessage();
var messageVm = new MessageVm
{
DisplayMessage = htmlToDisplay;
};
return View("Index.cshtml", "", messageVm);
}
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);
}
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,他提供了重写代码的重要线索,我在这里发布了完整有效的答案。Hi@Mukesh Kumar。试过了,似乎什么都没做。请检查编辑后的答案。我希望这可能会有所帮助。我不得不四处挖掘,并做了一些修改,但最终你的第二个答案提供了足够的信息,让我能够写出一个完整的、有效的解决方案,我也发布了这个解决方案。谢谢@Mukesh Kumar。太好了。把它标记为一个答案,这可能会帮助其他人。此外,如果需要其他更改,请编辑答案或让我知道我会这样做。是的。我用我的细节编辑了你的答案。在那里为我节省了很多工作。谢谢