我的数据库中有一个表,其中一个属性是一个Html页面(没有html,head和body标签),我打算把它放在我的一个视图的中间 - 比方说,我叫一个cotroller方法接受一个参数,并返回一个传递这个html大字符串作为模型的视图。我搜索了它(不多,我承认),并找到了以下方法:
<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %>
发现here in stackoverflow.当我尝试类似的剃须刀时,我最终得到了这个:
@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>")
这就是这个想法,但它并没有像我计划的那样有效。
答案 0 :(得分:87)
您只需要:@Html.Raw(yourEncodedHtmlFromYouDatabase)
我假设数据库中的html已经过适当的清理(或至少来自可靠的来源),因为如果没有,你可能会打开自己的跨站点脚本攻击。
您的方法不起作用的原因是默认情况下Razor HTML编码输出(每次使用@
显示某些内容时)。 Html.Raw
告诉Razor您信任HTML并且您希望在不编码的情况下显示它(因为它已经是原始HTML)。
答案 1 :(得分:11)
您还可以返回HTMLString,Razor将输出正确的格式,例如。
@Html.GetSomeHtml()
public static HtmlString GetSomeHtml()
{
var Data = "abc<br/>123";
return new HtmlString(Data);
}
这将允许您显示HTML