使用 MVC Razor 的 Html.Encode HTML Helper 的意外行为
我正在尝试通过 Razor 视图向浏览器显示文本 HTML。
我的代码中有类似这样的内容:
@Html.Encode("<!-- foo -->")
我原本期望 Html.Encode 帮助器返回
<-- foo -->
,但它却返回
&lt;!-- foo --&gt;
它看起来好像 Encode 帮助器对字符串进行了两次编码。
因此,为了获得我想要的输出,我必须用 Raw 帮助器包装 Encode 帮助器,就像这样
@Html.Raw(Html.Encode("<!-- foo -->"))
我是 MVC/Razor 的新手,所以这种行为让我有点困惑,也不确定是否这样做我对 Html.Encode 应该如何表现的期望是正确的。
继续使用 Razor,当我想将字符串编码为 HTML 时,我是否应该接受它并养成用 Html.Raw 包装 Html.Encode 的习惯?在 Razor 中是否有“更好”的方法来编码 HTML 字符串?
I am attempting to display literal HTML to the browser via my Razor View.
I have something like this in the code:
@Html.Encode("<!-- foo -->")
I was expecting the Html.Encode helper to return
<-- foo -->
but instead, it returns
<!-- foo -->
It appears as though the Encode helper encodes the string twice.
So, in order to get the output I want, I have to wrap the Encode helper with the Raw helper like this
@Html.Raw(Html.Encode("<!-- foo -->"))
I'm new to MVC/Razor, so this behavior has me a bit confused as well as unsure as to whether or not my expectations of how Html.Encode should behave, is correct.
Moving forward w/ Razor, should I suck it up and get in the habit of wrapping Html.Encode with Html.Raw when I want to encode a string to HTML? Is there a "better" way to encode HTML string in Razor?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
@ 语法执行 HTML 编码。通过使用 @Html.Encode 您可以手动编码,然后 @ 对您已经编码的内容进行编码。
所以,要得到你想要的,只需做
The @ syntax performs HTML encoding. By using @Html.Encode you're manually encoding, and then the @ encodes what you've already encoded.
So, to get what you want simply do
@
运算符已在 Razor 中进行 HTML 编码(除非参数是IHtmlString
实例)。所以你可以尝试:呈现:
The
@
operator already HTML encodes in Razor (unless the argument is anIHtmlString
instance). So you may try:which renders: