我在同一个控制器中为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)
它会生成正确的网址:
http://localhost:53365/EquivPacks/Add/1
但是当我尝试在那里导航时,它会向我发送一条错误消息:
参数字典包含参数' id'的空条目。非可空类型的System.Int32' for method' System.Web.Mvc.ActionResult Edit(Int32,Int32)'在' XXXXXXX.Controllers.EquivPacksController'。可选参数必须是引用类型,可空类型,或者声明为可选参数。
它似乎执行Edit
操作,而不是Add
操作,这是在路线图中配置的操作。
我该如何解决?
答案 0 :(得分:1)
路线定义的顺序很重要,第一场比赛获胜。您的第一个路由定义(editEquivPack
)表示匹配包含3个段的网址,其中第一个网段是“equivpacks”。
您的../EquivPacks/Add/1
网址与之匹配,因此它会调用Edit()
方法并将值"Add"
传递给该方法中的int id
参数(不能是绑定到int
,因此错误。)
您需要更改路线的顺序,以便addEquivPack
路线位于editEquivPack
路线之前。