我在我的数据库中有一个表,其中的一个属性是一个Html页面(没有html,head和body标签),我打算把它放在我的一个视图的中间 – 我称之为cotroller方法接受一个参数,并返回一个传递此html大字符串作为模型的视图。我搜索它(不是很多,我承认),并找到以下方法:
<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %>
那被发现here in stackoverflow.当我尝试一个类似的剃刀aproach,我结束了这:
@System.Web.HttpUtility.HtmlDecode("<h1>Test</h1>")
这是想法,但它没有像我计划的工作。
解决方法
你所需要的是:@ Html.Raw(yourEncodedHtmlFromYouDatabase)
我假设数据库中的html已经被正确地清理(或至少从可靠的源),因为如果没有,你可能开始自己跨站点脚本攻击。
你的方法不工作的原因是Razor HTML编码输出默认情况下(每次你使用@显示的东西)。 Html.Raw告诉Razor你信任的HTML,你想显示它,而不进行编码它(因为它已经是原始的HTML)。