书写/输出HTMLstring未转义
我有安全/消毒的HTML保存在数据库表中。
我怎样才能把这个HTML内容写在剃刀视图中?
它总是逃避像&和&
。
假设您的内容位于名为mystring
的string中
您可以使用:
@Html.Raw(mystring)
或者,您可以将string转换为HtmlString
或任何其他在模型中实现IHtmlString
types或直接内联并使用常规@
:
@{ var myHtmlString = new HtmlString(mystring);} @myHtmlString
在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)
您可以使用
@{ WriteLiteral("html string"); }
有时使用原始html可能会非常棘手。 主要是由于XSS漏洞。 如果这是一个问题,但你仍然想使用原始的HTML,你可以编码可怕的部分。
@Html.Raw("(<b>" + Html.Encode("<script>console.log('insert')</script>" + "Hello") + "</b>)")
结果是
(<b><script>console.log('insert')</script>Hello</b>)
你可以把你的string放入viewdata中,像这样:
ViewData["string"] = DBstring;
然后在视图中调用viewdata,如下所示:
@Html.Raw(ViewData["string"].ToString())
除了使用@MvcHtmlString.Create(ViewBag.Stuff)
build议的@MvcHtmlString.Create(ViewBag.Stuff)
,我build议你也使用AntiXSS库作为build议phill http://haacked.com/archive/2010/04/06/using-antixss-as-在默认的编码器换ASP-net.aspx
它编码几乎所有可能的XSS攻击string。