问题
here is the procedure to duplicate the issue.
- start new mvc 4 project.
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" } );
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.
回答1:
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 })
回答2:
Register your route
routes.MapRoute(
name: "TestUrl",
url: "Test",
defaults: new { controller = "TestController", action = "TestAction" }
);
add the following to TestAction.cshtml
@Html.RouteLink("Test", "TestUrl")
Now your URL is /Test, hoping this will help you.
回答3:
Quickest way would be to just specify a blank action.
@Html.RouteLink("link to TestController", "", "Test")
This will produce /Test
来源:https://stackoverflow.com/questions/13521664/how-to-make-routelink-return-the-correct-url