我正在使用MVC区域编写MVC应用程序。目前,我们在显示区域使用以下路线:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Display_default",
"Display/{controller}/{action}/{id}/{id2}/{id3}/{*id4}",
new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
);
}
这很有效。但是我们发现需要一个带有6个参数的控制器动作:
public ActionResult _MyMethod(string id, string id2, string id3, string id4, string id5, string id6)
我们发现我们可以添加当前设置,但是在第四个ID之后的url中的任何参数都被连接到第4个id参数。
我们试图扩展路线以接受我们需要的参数数量:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Display_default",
"Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
);
}
但是,使用此路线不再加载页面。
MVC路由是否对它可以映射到的参数数量有某种CAP?我们还发现,如果我们将映射参数的数量缩减为id,id2和id3,它将再次起作用,并将所有溢出连接到id3。
有没有人有这方面的任何信息?
答案 0 :(得分:1)
ASP.NET MCV对参数数量没有限制。
在你的情况下
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Display_default",
"Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional }
);
}
变量 id 是可选的,但 id4 是必需的。您必须在最后添加可选参数。
像
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id5}/{id6}/{id}/{id2}/{id3}/{*id4}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional , id6 = UrlParameter.Optional }
);
或者将所有参数设为可选
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional }
);