ASP.NET MVC 5 generates right url but executes wrong Action
I got a custom routes created for 2 different actions in same controller:
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" }
);
In a
URL.RouteURL("addEquivPack", ecommerceid = Model.EcommerceID) 
it generates a correct URL:
http://localhost:53365/EquivPacks/Add/1
But when i try to navigate there, it sends me a error message:
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.
 It seems that it executes Edit action and not Add action that is the action configured in route map.  
How can i fix it?
 The order of route definitions is important and the first match wins.  Your first route definition ( editEquivPack ) means match a url containing 3 segments, where the first segment is "equivpacks".  
 Your url of ../EquivPacks/Add/1 matches that, so it then calls the Edit() method and passes a value of "Add" to your int id parameter in that method (which cannot be bound to an int , hence the error).  
 You need to change the order of your routes so that the addEquivPack route is before the editEquivPack route.  
