编写/输出未转义的HTML字符串

AGS*_*AGS 425 asp.net-mvc razor asp.net-mvc-3

我已经在数据库表中保存了安全/清理的HTML.

如何在Razor视图中写出此HTML内容?

它总是逃避字符<和&符号&amp;.

Lor*_*nzo 638

假设您的内容位于名为mystring... 的字符串中

您可以使用:

@Html.Raw(mystring)
Run Code Online (Sandbox Code Playgroud)

或者,您可以将字符串转换为在模型HtmlString中实现的任何其他类型IHtmlString或直接内联并使用常规@:

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString
Run Code Online (Sandbox Code Playgroud)

  • @Lorenzo,+我使用最新的MVC 3和`razor`语法和`Html.Raw`绝对可以使用. (3认同)

Tom*_*ler 75

在ASP.NET MVC 3中你应该这样做:

// Say you have a bit of HTML like this in your controller:
ViewBag.Stuff = "<li>Menu</li>"
//  Then you can do this in your view:
@MvcHtmlString.Create(ViewBag.Stuff)
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢这种方法,因为如果传递的字符串为null,HTML.Raw会爆炸. (13认同)

And*_*rus 59

您可以使用

@{ WriteLiteral("html string"); }
Run Code Online (Sandbox Code Playgroud)

  • WriteLiteral为+1,不知道那一个 (6认同)
  • 这对我来说太棒了,在Hangfire应用程序中使用Razor发送电子邮件......`Html.Raw()`在那里不起作用 (4认同)

Tra*_*s J 11

有时使用原始html可能会很棘手.主要是因为XSS漏洞.如果这是一个问题,但你仍然想使用原始html,你可以编码可怕的部分.

@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
Run Code Online (Sandbox Code Playgroud)

结果是

(<b>&lt;script&gt;console.log('insert')&lt;/script&gt;Hello</b>)
Run Code Online (Sandbox Code Playgroud)


Aja*_*jay 5

您可以将字符串放入控制器中的 viewdata 中,如下所示:

 ViewData["string"] = DBstring;
Run Code Online (Sandbox Code Playgroud)

然后在视图中调用 viewdata,如下所示:

@Html.Raw(ViewData["string"].ToString())
Run Code Online (Sandbox Code Playgroud)