In my home controller, I have 3 Action methods. which is give below.
public ActionResult Index(int id)
{
return View();
}
public ActionResult Index2(int did,int docType)
{
return View();
}
public ActionResult Index3(int uid,int docId,int typeId)
{
return View();
}
As I had given diffrent parameter name in each action methods so I have to change in Route.config.
I have Done this
Method 1
routes.MapRoute(
name: "Home",
url: "{controller}/{action}/{did}/{docType}",
defaults: new { controller = "Home", action = "Index2", did = UrlParameter.Optional, docType = UrlParameter.Optional }
);
routes.MapRoute(
name: "Home",
url: "{controller}/{action}/{uid}/{docId}/{typeId}",
defaults: new { controller = "Home", action = "Index3", uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
but it is giving me exception like
Home' is already in the route collection. Route names must be unique
So I have change it to like this
Method 2
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{did}/{docType}/{uid}/{docId}/{typeId}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, did = UrlParameter.Optional, docType = UrlParameter.Optional, uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
);
When I hit Url like
http://localhost:50958/Home/Index/2
http://localhost:50958/Home/Index2/2/3
http://localhost:50958/Home/Index3/2/3/4
it throwing me exception.
This is Solution.
As suggested by Stephen Muecke
routes.MapRoute(
name: "Admin",
url: "{controller}/{action}/{did}/{docType}",
defaults: new { controller = "Home", action = "Index2", did = UrlParameter.Optional, docType = UrlParameter.Optional }
);
routes.MapRoute(
name: "User",
url: "{controller}/{action}/{uid}/{docId}/{typeId}",
defaults: new { controller = "Home", action = "Index3", uid = UrlParameter.Optional, docId = UrlParameter.Optional, typeId = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
name: "Home",- they need to be unique. Just change one or the othernameproperty is used by methods such as@Html.RouteLink("XYZ");which matchesroutes.MapRoute( name: "XYZ, ...)