使用MVC渲染带有嵌入式Razor变量的动态HTML

时间:2015-10-07 11:27:45

标签: c# html asp.net-mvc asp.net-mvc-4 razor

我有一些编码的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

真的坚持这一点,所以任何帮助将不胜感激!

2 个答案:

答案 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 ,他提供了重写代码的重要线索,我在此处发布了完整且有效的答案。