ASP.NET MVC 5生成正确的URL但执行错误的操作
我在同一个控制器中为两个不同的操作创建了自定义路由:
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
但是,当我尝试导航时,它会向我发送一条错误消息:
参数字典包含'XXXXXXX.Controllers.EquivPacksController'中方法'System.Web.Mvc.ActionResult Edit(Int32,Int32)'的非空类型'System.Int32'的参数'id'的空项。 可选参数必须是引用类型,可为空类型,或者声明为可选参数。
它似乎执行Edit
操作而不是Add
动作,这是在路由映射中配置的动作。
我该如何解决它?
路线定义的顺序很重要,第一场比赛胜出。 你的第一个路径定义( editEquivPack
)意味着匹配一个包含3段的url,其中第一段是“equivpacks”。
你的../EquivPacks/Add/1
url匹配那个,所以它调用Edit()
方法并将一个"Add"
值传递给你方法中的int id
参数(它不能绑定到int
,因此错误)。
你需要改变你的路由的顺序,使addEquivPack
路线是前editEquivPack
路线。
上一篇: ASP.NET MVC 5 generates right url but executes wrong Action