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

发布于 2024-11-09 09:27:51 字数 631 浏览 3 评论 0原文

我正在尝试通过 Razor 视图向浏览器显示文本 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 应该如何表现的期望是正确的。

继续使用 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

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

何处潇湘 2024-11-16 09:27:51

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

所以,要得到你想要的,只需做

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

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

@("<!-- foo -->")
白龙吟 2024-11-16 09:27:51

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

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

呈现:

<!-- foo -->

The @ operator already HTML encodes in Razor (unless the argument is an IHtmlString instance). So you may try:

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

which renders:

<!-- foo -->
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文