使用MVC Razor的Html.Encode HTML Helper的意外行为

时间:2011-05-21 14:17:36

标签: asp.net-mvc-3 razor encode

我试图通过我的Razor View向浏览器显示文字HTML。

我在代码中有这样的东西:

@Html.Encode("<!-- foo -->")

我期待Html.Encode助手返回

&lt;-- foo --&gt;

但相反,它会返回

&amp;lt;!-- foo --&amp;gt;

似乎Encode助手对字符串进行了两次编码。

所以,为了得到我想要的输出,我必须用这样的Raw助手包装Encode助手

@Html.Raw(Html.Encode("<!-- foo -->"))

我是MVC / Razor的新手,所以这种行为让我有点困惑,也不确定我对Html.Encode 的行为方式的期望是否正确。< / p>

向前推w / Razor,当我想将字符串编码为HTML时,我应该吮吸它并养成用Html.Raw包装Html.Encode的习惯吗?是否有一种“更好”的方法来编码Razor中的HTML字符串?

2 个答案:

答案 0 :(得分:4)

@语法执行HTML编码。通过使用@ Html.Encode,您可以手动编码,然后@编码您已编码的内容。

所以,为了得到你想要的东西,只需做

@("<!-- foo -->")

答案 1 :(得分:2)

@运算符已经在Razor中编码HTML(除非参数是IHtmlString实例)。所以你可以试试:

@("<!-- foo -->")

呈现:

&lt;!-- foo --&gt;