One of the most amazing features of ASP.NET MVC is its powerful routing engine that let you define clear URLs for your web application. Today I want to share a very simple and short tip with you to handle non-English URLs in your ActionLink methods.
Let’s start with an example; in a blog engine we have two routes as follows:
routes.MapRoute(
"ShowPost",
"read/{url}",
new { controller = "Post", action = "Show" }
);
routes.MapRoute(
"EditPost",
"edit/{url}",
new { controller = "Post", action = "Edit" }
);
and you decide to show a Persian title in a URL as follows: /blog/read/این-یک-عنوان-است
Everything is fine till now but if you want to put an ActionLink in your view to redirect user to edit page in this way:
<%= Html.ActionLink("Edit", "Edit", new { url = Model.Url }) %>
You will be redirected to an ugly encoded URL like this /edit/%D8%AA%D8%B3%D8%AA instead of /blog/edit/این-یک-عنوان-است
Here’s the simple trick to overcome this:
<%= HttpUtility.UrlDecode(Html.ActionLink("Edit", "Edit", new { url = Model.Url })) %>
That’s it!
