在 Mvc 中使用 Html.ActionLink 时如何绕过 HTML 编码?

Posted

技术标签:

【中文标题】在 Mvc 中使用 Html.ActionLink 时如何绕过 HTML 编码?【英文标题】:How do I bypass the HTML encoding when using Html.ActionLink in Mvc? 【发布时间】:2010-09-30 04:35:46 【问题描述】:

每当我使用 html.ActionLink 时,它总是 Html 对我的显示字符串进行编码。例如,我希望我的链接看起来像这样:

<a href="/posts/422/My-Post-Title-Here">More&hellip;</a>

它的输出如下:More&hellip;

&hellip 是 "..." 以防你想知道。

但是,actionlink 输出实际文本“…”作为链接文本。如果我想输出这个,我有同样的问题:

<a href="/posts/422/My-Post-Title-Here"><em>My-Post-Title-Here</em></a>

我最终得到: <em>My-Post-Title-Here</em>

知道怎么做吗?

【问题讨论】:

【参考方案1】:

看起来 ActionLink 总是在链接文本上使用调用 HttpUtility.Encode。您可以使用 UrlHelper 生成 href 并自己构建锚标记。

<a href='@Url.Action("Posts", ...)'>More&hellip;</a>

或者,您可以“解码”传递给 ActionLink 的字符串。用 HTML 构建链接似乎更具可读性(对我而言)——尤其是在 Razor 中。以下是用于比较的等价物。

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)

【讨论】:

@tvanfosson 差不多 4 年后...这仍然是将特殊字符(如&符号、插入符号等)填充到链接文本中的最佳方法吗? @one.beat.consumer 我认为是这样,但我添加了另一种选择。还更新以反映 Razor 语法。 Mvc Html 扩展都是垃圾,为了更强大试试 Fubu MVC 的 HtmlTags 库,然后您可以编写自己的(更好的)扩展方法返回 HtmlTags 而不是 MvcHtmlString 对于 MVC5,他们将 Decode 方法重命名为 HtmlDecode @Html.ActionLink(HttpUtility.HtmlDecode("More…"), "Posts", ...)【参考方案2】:

Sam 给出的答案实际上是正确的,我在我的解决方案中使用了它,因此我自己尝试了它。 您可能希望删除多余的括号,使其变为如下所示:

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home")

【讨论】:

【参考方案3】:

或者,只需使用普通的 Unicode 省略号字符 \u2026 并让 MVC 担心如何对其进行编码。除非有一些特别令人信服的理由,否则您特别需要一个 hellip 实体引用而不是字符引用,或者只是将字符包含为简单的 UTF-8 字节。

另一种选择:只使用三个句点。省略号 (U+2026) 是一个兼容字符,仅包含在与 pre-Unicode 编码之间的往返行程中。与简单的点相比,它对您的帮助很小。

【讨论】:

省略号在语义上比三个句点更有意义。它通常也渲染得更好。【参考方案4】:

看看这个:

  <p>Some text   @(new HtmlString(stringToPaste)) </p>

【讨论】:

【参考方案5】:

在传递值之前对其进行解码。只是遇到了同样的问题(不同的字符),它工作正常:

例如:

@Html.ActionLink(HttpUtility.HtmlDecode(_("&amp;")), "Index", "Home")

虽然很烦

【讨论】:

以上是关于在 Mvc 中使用 Html.ActionLink 时如何绕过 HTML 编码?的主要内容,如果未能解决你的问题,请参考以下文章

带有 mvc 核心的 Ajax.ActionLink 替代方案

在MVC中使用ActionLink打开Modal并传参

MVC5 中 ActionLink 的 HTML 按钮

如何在 ASP.NET MVC 中将 CSS 类应用于 Html.ActionLink?

MVC html.actionlink

@Html.ActionLink 在 mvc-5 中不起作用