具有不同参数名称的多个参数的 MVC 路由
MVC routing with multiple parameter with different parameter name
在我的家庭控制器中,我有 3 个 Action 方法。
这是下面给出的。
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();
}
因为我在每个操作方法中给出了不同的参数名称,所以我必须在 Route.config
中进行更改。
我已经做到了
方法一
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 }
);
但它给了我例外,比如
Home' is already in the route collection. Route names must be unique
所以我改成了这样
方法二
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 }
);
当我点击Url喜欢
http://localhost:50958/Home/Index/2
http://localhost:50958/Home/Index2/2/3
http://localhost:50958/Home/Index3/2/3/4
它向我抛出异常。
这是解决方案。
正如 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 }
);
路由名称应该是唯一的,您有两条同名路由:"Home"
因为我为所有路线指定了相同的名称。并且路由名称必须是唯一的,现在我已经用不同的名称重命名了路由。
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 }
);
在我的家庭控制器中,我有 3 个 Action 方法。 这是下面给出的。
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();
}
因为我在每个操作方法中给出了不同的参数名称,所以我必须在 Route.config
中进行更改。
我已经做到了
方法一
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 }
);
但它给了我例外,比如
Home' is already in the route collection. Route names must be unique
所以我改成了这样
方法二
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 }
);
当我点击Url喜欢
http://localhost:50958/Home/Index/2
http://localhost:50958/Home/Index2/2/3
http://localhost:50958/Home/Index3/2/3/4
它向我抛出异常。
这是解决方案。
正如 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 }
);
路由名称应该是唯一的,您有两条同名路由:"Home"
因为我为所有路线指定了相同的名称。并且路由名称必须是唯一的,现在我已经用不同的名称重命名了路由。
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 }
);