我有安全/消毒HTML保存在一个DB表。
如何在Razor视图中写出这个HTML内容?
它总是转义像<和&这样的字符到&。
<
&
假设你的内容在一个名为mystring的字符串中…
mystring
你可以使用:
@Html.Raw(mystring)
或者,你可以将你的字符串转换为HtmlString或任何其他类型,在模型中或直接内联实现IHtmlString,并使用常规的@:
HtmlString
IHtmlString
@
@{ var myHtmlString = new HtmlString(mystring);} @myHtmlString
在ASP。你应该这样做:
// 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)
除了使用@MvcHtmlString.Create(ViewBag.Stuff) 正如Dommer所建议的,我建议你也使用AntiXSS库,正如所建议的phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx
@MvcHtmlString.Create(ViewBag.Stuff)
它编码了几乎所有可能的XSS攻击字符串。
你可以使用
@{ WriteLiteral("html string"); }
你可以像这样把你的字符串放到控制器的viewdata中:
ViewData["string"] = DBstring;
然后在view中调用viewdata,像这样:
@Html.Raw(ViewData["string"].ToString())
有时使用原始html会很棘手。主要是因为XSS漏洞。如果这是一个问题,但你仍然想使用原始html,你可以编码可怕的部分。
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
结果
(<b><script>console.log('insert')</script>Hello</b>)
在razorenengine中使用模板函数的完整示例(例如,用于生成电子邮件):
@model SomeModel @{ Func<PropertyChangeInfo, object> PropInfo = @<tr class="property"> <td> @item.PropertyName </td> <td class="value"> <small class="old">@item.OldValue</small> <small class="new">@item.CurrentValue</small> </td> </tr>; } <body> @{ WriteLiteral(PropInfo(new PropertyChangeInfo("p1", @Model.Id, 2)).ToString()); } </body>