Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVC呈现带有嵌入Razor变量的动态HTML_C#_Html_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

C# 使用MVC呈现带有嵌入Razor变量的动态HTML

C# 使用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,其中嵌入了1000个不同的Razor变量,我已经存储了这些变量,需要从数据库中检索。我希望能够在MVC/razor视图中渲染它

仅举一个保存在数据库中的html的简单示例(可能更复杂):

Index.cshtml

<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。太好了。把它标记为一个答案,这可能会帮助其他人。此外,如果需要其他更改,请编辑答案或让我知道我会这样做。是的。我用我的细节编辑了你的答案。在那里为我节省了很多工作。谢谢