42

Whenever I use Html.ActionLink it always Html encodes my display string. For instance I want my link to look like this:

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

it outputs like this: More&hellip;

&hellip is "..." incase you were wondering.

However the actionlink outputs the actual text "&hellip;" as the link text. I have the same problem with if I want to output this:

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

I wind up with: <em>My-Post-Title-Here</em>

Any idea how to do this?

5 Answers 5

81

It looks like ActionLink always uses calls HttpUtility.Encode on the link text. You could use UrlHelper to generate the href and build the anchor tag yourself.

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

Alternatively you can "decode" the string you pass to ActionLink. Constructing the link in HTML seems to be slightly more readable (to me) - especially in Razor. Below is the equivalent for comparison.

@Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
Sign up to request clarification or add additional context in comments.

4 Comments

@tvanfosson almost 4 years later... is this still the best method for stuffing special characters like ampersands, carets, etc. into link text?
@one.beat.consumer I think so, but there is an alternative which I've added. Also updated to reflect Razor syntax.
Mvc Html extensions are all rubbish, for more power try Fubu MVC's HtmlTags library, you can then write your own (better) extension methods that return HtmlTags rather than MvcHtmlString
For MVC5 they renamed the Decode method to HtmlDecode @Html.ActionLink(HttpUtility.HtmlDecode("More&hellip;"), "Posts", ...)
10

The answer given by Sam is actually correct and I used it in my solution so I have therefore tried it myself. You may want to remove the extra parenthesis so it becomes something like this:

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

Comments

7

Alternatively, just use a plain Unicode ellipsis character \u2026 and let MVC worry about how to encode it. Unless there's some particularly compelling reason you'd specifically need a hellip entity reference as opposed to a character reference or just including the character as simple UTF-8 bytes.

Alternative alternatively: just use three periods. The ellipsis (U+2026) is a compatibility character, only included to round-trip to pre-Unicode encodings. It gets you very little compared to simple dots.

1 Comment

The ellipsis is more semantically meaningful than three periods. It's also usually rendered more nicely.
6

Check out this:

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

Comments

4

Decode it before passing the value in. Just had this same issue (different characters) and it works fine:

Eg:

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

Annoying though

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.