42

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

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

它的输出是这样的:更多…

&hellip 是“...”,以防您想知道。

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

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

我结束了: <em>My-Post-Title-Here</em>

知道怎么做吗?

4

5 回答 5

80

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

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

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

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
于 2009-01-08T02:00:10.680 回答
10

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

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home")
于 2012-04-13T18:24:08.840 回答
7

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

或者:只使用三个句点。省略号 (U+2026) 是一个兼容字符,仅包含在与 pre-Unicode 编码之间的往返行程中。与简单的点相比,它给你带来的好处很少。

于 2009-01-08T02:18:46.383 回答
6

看看这个:

  <p>Some text   @(new HtmlString(stringToPaste)) </p>
于 2012-04-30T18:38:37.323 回答
4

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

例如:

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

虽然烦人

于 2011-08-19T02:01:21.080 回答