ASP.NET MVC 5生成正确的URL但执行错误的Action

时间:2018-02-20 11:13:19

标签: asp.net-mvc custom-routes

我在同一个控制器中为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操作,这是在路线图中配置的操作。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

路线定义的顺序很重要,第一场比赛获胜。您的第一个路由定义(editEquivPack)表示匹配包含3个段的网址,其中第一个网段是“equivpacks”

您的../EquivPacks/Add/1网址与之匹配,因此它会调用Edit()方法并将值"Add"传递给该方法中的int id参数(不能是绑定到int,因此错误。)

您需要更改路线的顺序,以便addEquivPack路线位于editEquivPack路线之前。