У меня есть маршрут, который выглядит так:
routes.MapRoute(
"BlogTags",
"Blog/Tags/{tag}",
new { controller = "Blog", action = "BrowseTag", viewRss = false }
);
И я создаю URL, используя этот маршрут следующим образом:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = sortedTags[i].Tag })%>
Однако, когда используется тег с символом # (например, «C #»), механизм маршрутизации не может его избежать, поэтому я получаю URL, который выглядит следующим образом:
<a href="/Blog/Tags/C#">C#</a>
Что мне нужно, так это # экранировать, чтобы он выглядел так:
<a href="/Blog/Tags/C%23">C#</a>
Я пытался сделать Url.Encode для тега, прежде чем он ушел в маршрут, например:
<%= Html.RouteLink(Html.Encode(sortedTags[i].Tag),
new { action = "BrowseTag", tag = Url.Encode(sortedTags[i].Tag) })%>
Но это заставляет механизм маршрутизации дважды избегать # (что приводит к аварийному завершению ASP.NET с ошибкой неверного запроса):
<a href="/Blog/Tags/C%2523">C#</a>
Как я могу заставить механизм маршрутизации корректно экранировать этот символ # для меня?
Заранее благодарю за помощь.