ASP.Net 路由:客户 ID 未传递给操作
ASP.Net Routing: Customer ID not passing to action
查看我使用 @Html.RouteLink
生成的 url localhost:55831/Customers/Edit/1/ALFKI
@Html.RouteLink("Edit", "PageWithId",
new
{
controller = "Customers",
action = "Edit",
id = item.CustomerID,
page = ViewBag.CurrentPage
})
这是我的路由代码 PageWithId 我尝试了两个路由一个接一个但是 none 工作
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 }
);
请有人帮忙,因为当我点击这个 link localhost:55831/Customers/Edit/1/ALFKI 然后 客户 ID ALFKI 没有传递给编辑动作。我调试编辑操作代码,发现 id 总是变得空。我尝试了一些用于编辑操作的路由,但仍然没有成功。
路线的顺序很重要。路由按顺序检查,第一个匹配的路由获胜。
因为您的第一个 (PageWithSort
) 路线匹配任何具有 1 到 5 个路段的路线,然后 /Customers/Edit/1/ALFKI
,其中包含 4 个路段匹配,并且不再检查其他路线。由于 ALFKI
被传递给名为 SortColumn
的第 4 个段,因此它只会绑定到 Edit()
方法中名为 SortColumn
的参数(而不是名为 id
)
就目前而言,您的 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 个附加段的 url 将匹配 CustomerEditWithId
路由,并且第 3 个段将绑定到名为 [=25= 的参数] 并且第 4 段将绑定到名为 id
的参数。因此,您在 CustomersController
中的方法应该是
public ActionResult Edit(int page, string id)
查看我使用 @Html.RouteLink
localhost:55831/Customers/Edit/1/ALFKI
@Html.RouteLink("Edit", "PageWithId",
new
{
controller = "Customers",
action = "Edit",
id = item.CustomerID,
page = ViewBag.CurrentPage
})
这是我的路由代码 PageWithId 我尝试了两个路由一个接一个但是 none 工作
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 }
);
请有人帮忙,因为当我点击这个 link localhost:55831/Customers/Edit/1/ALFKI 然后 客户 ID ALFKI 没有传递给编辑动作。我调试编辑操作代码,发现 id 总是变得空。我尝试了一些用于编辑操作的路由,但仍然没有成功。
路线的顺序很重要。路由按顺序检查,第一个匹配的路由获胜。
因为您的第一个 (PageWithSort
) 路线匹配任何具有 1 到 5 个路段的路线,然后 /Customers/Edit/1/ALFKI
,其中包含 4 个路段匹配,并且不再检查其他路线。由于 ALFKI
被传递给名为 SortColumn
的第 4 个段,因此它只会绑定到 Edit()
方法中名为 SortColumn
的参数(而不是名为 id
)
就目前而言,您的 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 个附加段的 url 将匹配 CustomerEditWithId
路由,并且第 3 个段将绑定到名为 [=25= 的参数] 并且第 4 段将绑定到名为 id
的参数。因此,您在 CustomersController
中的方法应该是
public ActionResult Edit(int page, string id)