How to make routelink return the correct URL?

Derek Liang picture Derek Liang · Nov 23, 2012 · Viewed 14.9k times · Source

here is the procedure to duplicate the issue.

  1. start new mvc 4 project.
  2. add the following lines to the RegisterRoutes() method just before the "Default" route

    routes.MapRoute(
            name: "Test",
            url: "Test/{action}",
            defaults: new { controller = "Test", action = "Index" }
    );
    
  3. add the following to Index.cshtml and About.cshtml

    @Html.RouteLink("link to TestController", "Test")
    

As you can see that the generated html code is different for the 2 pages. I would expect the URL is "/Test" which is rendered correctly for Index.cshtml, but it become "/Test/About" for About.cshtml.

My question is if there is any documented way to generate the same correct URL. The above example is created just for demonstration purpose. I would like to use the routing table information to generate menu.

Answer

McGarnagle picture McGarnagle · Nov 23, 2012

It seems the engine is setting the action route value from the current page ("Index", "About"). So one way to fix this is to "unset" that route value:

@Html.RouteLink("link to Test Controller", "Test", new { action = String.Empty })