我有安全/消毒HTML保存在一个DB表。

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

它总是将<和&字符转义为&。


当前回答

除了使用@MvcHtmlString.Create(ViewBag.Stuff) 正如Dommer所建议的,我建议你也使用AntiXSS库phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

它编码了几乎所有可能的XSS攻击字符串。

其他回答

在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>

除了使用@MvcHtmlString.Create(ViewBag.Stuff) 正如Dommer所建议的,我建议你也使用AntiXSS库phill http://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspx

它编码了几乎所有可能的XSS攻击字符串。

你可以使用

@{ WriteLiteral("html string"); }

在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)

假设你的内容在一个名为mystring的字符串中…

你可以使用:

@Html.Raw(mystring)

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

@{ var myHtmlString = new HtmlString(mystring);}
@myHtmlString