How to make routelink return the correct URL?

有些话、适合烂在心里 提交于 2019-12-10 17:41:29

问题


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.


回答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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!