ASP.NET MVC Url.Action路由错误

Tri*_*ack 2 asp.net-mvc routing

我现在一直在使用它,但我似乎无法弄清楚,在这个简单的代码中可能出错:

<a href="<%= Url.Action("Page", new { page=(Model.PageIndex + 1) }) %>" >a</a>
Run Code Online (Sandbox Code Playgroud)

使用此路由表:

routes.MapRoute(
            "Paging",
            "Home/Page/{page}",
            new { controller = "Home", action = "Index" }
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)

当然这种方法

public ActionResult Index(int? page)
Run Code Online (Sandbox Code Playgroud)

我得到的不是预期的地址http:// localhost:58296/Home/Page/1一个http:// localhost:58296/Home/Page?page = 1

使用时

<%= Html.RouteLink("a", "Paging", new { page=(Model.PageIndex+1) }) %>
Run Code Online (Sandbox Code Playgroud)

它有效..请问,我的错误在哪里?我想要图片链接,所以如果有办法将它插入到Html.RouteLink中,我也会批评这些信息.

提前致谢.

Chu*_*uck 8

这里有很多项目可供您充分了解正在发生的事情.对不起,这会有点长.

routes.MapRoute(
    "Paging",
    "Home/Page/{page}",
    new { controller = "Home", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)

首先,这是你想要的路线.您不在路径路径中包含操作路由参数"{action}".此路由可能采取的唯一操作是您指定为默认操作值"Index"的值.

<a href="<%= Url.Action("Page", new { page=(Model.PageIndex + 1) }) %>" >a</a>
Run Code Online (Sandbox Code Playgroud)

其次,在您的链接中,您正在设置Page的操作.您期望的路线不接受作为参数的操作,并且它唯一知道的操作是索引.当Url.Action在路由表中查找可能的路由时,它将跳过您想要的路由,因为该路由不接受Page的操作.默认路由是有效的,因为您隐式提供控制器,Home,显式提供操作,页面,允许框架提供id,string.Empty的默认值,并且任何其他参数作为查询参数页面添加.

当您将Url.Action更改为"Index"时,Url.Action方法检查了routes表,并找到了为Home控制器指定了Index的操作的路由,其参数为page,所有内容都更加快乐.

希望有所帮助,而不是太混乱.