ASP.NET MVC 5 生成了正确的 url 但执行了错误的 Action
ASP.NET MVC 5 generates right url but executes wrong Action
我在同一控制器中为 2 个不同的操作创建了自定义路由:
routes.MapRoute(
name: "editEquivPack",
url: "equivpacks/{id}/{ecommerceid}",
defaults: new { controller = "EquivPacks", action = "Edit" }
);
routes.MapRoute(
name: "addEquivPack",
url: "equivpacks/add/{ecommerceid}",
defaults: new { controller = "EquivPacks", action = "Add" }
);
在
URL.RouteURL("addEquivPack", ecommerceid = Model.EcommerceID)
它生成正确的 URL:
http://localhost:53365/EquivPacks/Add/1
但是当我尝试导航到那里时,它向我发送了一条错误消息:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Edit(Int32, Int32)' in 'XXXXXXX.Controllers.EquivPacksController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
它似乎执行 Edit
操作而不是 Add
操作,这是在路由映射中配置的操作。
我该如何解决?
路由定义的顺序很重要,第一场比赛获胜。您的第一个路线定义 (editEquivPack
) 表示 匹配包含 3 个段的 url,其中第一个段是 "equivpacks".
您的 ../EquivPacks/Add/1
的 url 匹配,因此它会调用 Edit()
方法并将值 "Add"
传递给您的 int id
参数该方法(不能绑定到 int
,因此出现错误)。
您需要更改路线的顺序,使 addEquivPack
路线在 editEquivPack
路线之前。
我在同一控制器中为 2 个不同的操作创建了自定义路由:
routes.MapRoute(
name: "editEquivPack",
url: "equivpacks/{id}/{ecommerceid}",
defaults: new { controller = "EquivPacks", action = "Edit" }
);
routes.MapRoute(
name: "addEquivPack",
url: "equivpacks/add/{ecommerceid}",
defaults: new { controller = "EquivPacks", action = "Add" }
);
在
URL.RouteURL("addEquivPack", ecommerceid = Model.EcommerceID)
它生成正确的 URL:
http://localhost:53365/EquivPacks/Add/1
但是当我尝试导航到那里时,它向我发送了一条错误消息:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Edit(Int32, Int32)' in 'XXXXXXX.Controllers.EquivPacksController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
它似乎执行 Edit
操作而不是 Add
操作,这是在路由映射中配置的操作。
我该如何解决?
路由定义的顺序很重要,第一场比赛获胜。您的第一个路线定义 (editEquivPack
) 表示 匹配包含 3 个段的 url,其中第一个段是 "equivpacks".
您的 ../EquivPacks/Add/1
的 url 匹配,因此它会调用 Edit()
方法并将值 "Add"
传递给您的 int id
参数该方法(不能绑定到 int
,因此出现错误)。
您需要更改路线的顺序,使 addEquivPack
路线在 editEquivPack
路线之前。