是否可以在ASP.NET MVC 3中显示数据库中的原始Html?

时间:2011-01-25 20:14:26

标签: asp.net-mvc-3 razor

我的数据库中有一个表,其中一个属性是一个Html页面(没有html,head和body标签),我打算把它放在我的一个视图的中间 - 比方说,我叫一个cotroller方法接受一个参数,并返回一个传递这个html大字符串作为模型的视图。我搜索了它(不多,我承认),并找到了以下方法:

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %>

发现here in stackoverflow.当我尝试类似的剃须刀时,我最终得到了这个:

@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>")

这就是这个想法,但它并没有像我计划的那样有效。

2 个答案:

答案 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