ASP.NET MVC Url.Action路由错误

时间:2009-08-19 08:05:28

标签: asp.net-mvc routing

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

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

使用此路由表:

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
        );

当然这个方法

public ActionResult Index(int? page)

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

使用时

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

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

提前致谢。

2 个答案:

答案 0 :(得分:8)

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

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

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

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

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

当您将Url.Action更改为“Index”时,Url.Action方法检查了routes表,并找到了为Home控制器指定了Index的操作的路由,其参数为page,一切都更快乐。

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

答案 1 :(得分:2)

我不知道为什么,但是

<%= Url.Action("Index", new { page=(Model.PageIndex + 1) }) %>

工作,它显示并指向/ Home / Page / 1。如果有人能向我解释,我会很感激。