我现在一直在使用它,但我似乎无法弄清楚,在这个简单的代码中可能出错:
<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中,我也会批评这些信息。
提前致谢。
答案 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。如果有人能向我解释,我会很感激。