Tengo una ruta que tiene este aspecto:Conseguir ASP.NET MVC para escapar correctamente el # (almohadilla/libra) personaje de rutas
routes.MapRoute(
"BlogTags",
"Blog/Tags/{tag}",
new { controller = "Blog", action = "BrowseTag", viewRss = false }
);
Y crear una URL utilizando esa ruta como esta:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = sortedTags[i].Tag })%>
sin embargo, cuando se utiliza una etiqueta con un carácter # (como "C#"), el motor de enrutamiento no se escapa de ella, por lo que obtener una URL que tiene este aspecto:
<a href="/Blog/Tags/C#">C#</a>
Lo que necesito es el # escapó de manera que se parezca a esto:
<a href="/Blog/Tags/C%23">C#</a>
He intentado hacer un Url.Encode en la etiqueta antes de que entrara en la ruta, así:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = Url.Encode(sortedTags[i].Tag) })%>
pero eso hace que el motor de enrutamiento de escape doble del # (lo que provoca un accidente de ASP.NET con un error de solicitud malo)):
<a href="/Blog/Tags/C%2523">C#</a>
¿Cómo puedo obtener el motor de enrutamiento para escapar de ese carácter # para mí correc Tly?
Gracias por su ayuda con anticipación.
Como nota al margen, el motor de enrutamiento está arreglado en .NET 4. Se escapará de todo lo que se le haya pasado. Si está ejecutando una aplicación MVC 2 en .NET 4, debería poder retomar este comportamiento automáticamente. – Levi