查看我使用localhost:55831/Customers/Edit/1/ALFKI
@Html.RouteLink
@Html.RouteLink("Edit", "PageWithId",
new
{
controller = "Customers",
action = "Edit",
id = item.CustomerID,
page = ViewBag.CurrentPage
})
这是 PageWithId 的路由代码我一个接一个地尝试了两个路由但没有工作
routes.MapRoute(
name: "PageWithId",
url: "{controller}/{action}/{page}/{id}"
);
和
routes.MapRoute(
name: "CustomerEditWithId",
url: "Customers/Edit/{page}/{id}",
defaults: new { controller = "Customers", action = "Edit" }
);
routes.MapRoute(
name: "PageWithSort",
url: "{controller}/{action}/{page}/{SortColumn}/{CurrentSort}",
defaults: new { action = "Index", page = UrlParameter.Optional, SortColumn = UrlParameter.Optional, CurrentSort = UrlParameter.Optional }
);
routes.MapRoute(
name: "PageWithId",
url: "{controller}/{action}/{page}/{id}"
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
请一些帮助,因为当我点击ob此链接localhost:55831 / Customers / Edit / 1 / ALFKI然后客户ID ALFKI 没有传递给编辑操作。我调试编辑操作代码,发现id始终为null。我尝试了很少的路由进行编辑操作,但仍然没有运气。
答案 0 :(得分:1)
路线的顺序很重要。路线按顺序检查,第一条匹配路线获胜。
因为您的第一个(PageWithSort
)路由匹配任何包含1到5个段的路由,所以/Customers/Edit/1/ALFKI
包含4个段匹配,并且不会检查其他路由。由于ALFKI
被传递到名为SortColumn
的第4个段,因此它只会绑定到SortColumn
方法中名为Edit()
的参数(而不是id
{1}})
目前,您的PageWithId
和Default
路线毫无意义,因为它们永远不会被击中。
此外,只有路线定义中的最后一个参数可以用UrlParameter.Optional
标记。
您需要创建特定路线,并按正确顺序找到它们。将您的路线定义更改为(注意我省略了PageWithSort
路线,因为它不清楚您想要做什么,并且无论如何都包含错误)
routes.MapRoute(
name: "CustomerEditWithId",
url: "Customers/Edit/{page}/{id}",
defaults: new { controller = "Customers", action = "Edit" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
现在任何以/Customers/Edit
开头且包含2个额外细分的网址都会与CustomerEditWithId
路由匹配,第3个细分将绑定到名为page
的参数,第4个细分将绑定到名为id
的参数。因此,CustomersController
中的方法应为
public ActionResult Edit(int page, string id)