2009-01-08 15 views
39

Siempre que uso Html.ActionLink siempre Html codifica mi cadena de visualización. Por ejemplo, yo quiero mi enlace a este aspecto:¿Cómo omito la codificación HTML cuando uso Html.ActionLink en Mvc?

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

emite la siguiente manera: More&hellip;

& hellip es "..." en caso de que se preguntan.

Sin embargo, el actionlink muestra el texto actual "& hellip;" como el texto del enlace. Tengo el mismo problema si quiero salida de esto:

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

termino con: <em>My-Post-Title-Here</em>

alguna idea de cómo hacer esto?

Respuesta

76

Parece que ActionLink siempre usa llamadas HttpUtility.Encode en el texto del enlace. Puede usar UrlHelper para generar el href y construir la etiqueta de anclaje usted mismo.

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

Alternativamente puede "decodificar" la cadena que pasa a ActionLink. La construcción del enlace en HTML parece ser un poco más legible (para mí), especialmente en Razor. A continuación se muestra el equivalente para la comparación.

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

@tvanfosson casi 4 años después ... ¿Sigue siendo el mejor método para relleno caracteres especiales como ampersands, carets, etc. en el texto del enlace? –

+0

@ one.beat.consumer Creo que sí, pero hay una alternativa que he agregado. También se actualizó para reflejar la sintaxis de Razor. – tvanfosson

+0

@tvanfosson un buen hombre, y completo, tvan. Gracias. –

7

Como alternativa, sólo tiene que utilizar una llanura Unicode puntos suspensivos carácter \ u2026 y vamos MVC preocuparse acerca de cómo codificar. A menos que exista una razón especialmente convincente, necesitaría específicamente una referencia de entidad hellip en lugar de una referencia de caracteres o simplemente incluir el carácter como simples bytes UTF-8.

Alternativa alternativamente: solo use tres períodos. La elipsis (U + 2026) es un carácter de compatibilidad, solo incluido para el viaje de ida y vuelta a las codificaciones pre-Unicode. Te lleva muy poco en comparación con los puntos simples. .

+1

La elipsis tiene más significado semántico que tres períodos. Por lo general, se procesa mejor. – bdesham

4

descodificarlo antes de pasar el valor en tan sólo tenía el mismo tema (personajes diferentes) y funciona bien:

Ej:

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

molesto, aunque

10

La respuesta dada por Sam es realmente correcto y lo utilicé en mi solución, así que lo he probado yo mismo. Es posible que desee quitar el paréntesis extra por lo que se convierte en algo parecido a esto:

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

Salida esto:

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