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路线。

链接地址: http://www.djcxy.com/p/39229.html

上一篇: ASP.NET MVC 5 generates right url but executes wrong Action

下一篇: ASP.Net MVC routing issue with parameters