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

Mic*_*cah 41 asp.net-mvc html-encode

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

<a href="/posts/422/My-Post-Title-Here">More&hellip;</a>
Run Code Online (Sandbox Code Playgroud)

它输出如下:更多…

&hellip是"......",你想知道.

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

<a href="/posts/422/My-Post-Title-Here"><em>My-Post-Title-Here</em></a>
Run Code Online (Sandbox Code Playgroud)

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

知道怎么做吗?

tva*_*son 79

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

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

或者,您可以"解码"传递给ActionLink的字符串.在HTML中构建链接似乎更具可读性(对我而言) - 尤其是在Razor中.以下是相当的比较.

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
Run Code Online (Sandbox Code Playgroud)


小智 10

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

@Html.ActionLink(HttpUtility.HtmlDecode("&amp;"), "Index", "Home")
Run Code Online (Sandbox Code Playgroud)


bob*_*nce 7

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

或者替代:只使用三个时期.省略号(U + 2026)是一个兼容性字符,仅包括往往前Unicode编码的往返.与简单的点相比,它让你很少.


Pav*_*nik 7

看看这个:

  <p>Some text   @(new HtmlString(stringToPaste)) </p>
Run Code Online (Sandbox Code Playgroud)