我有一个名为Admin
的区域,在AdminAreaRegistration
中我定义了像打击一样的路线:
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new {Controller="Home", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
name: "Product",
url: "Admin/ProductForm-{FormName}",
defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional }
);
}
}
并在ProductFormController
(在Admin
区域内)我有:
public ActionResult Index(string FormName)
{
return View();
}
如果我想转到此网址:http://localhost:5858/Admin/ProductForm-mobile
,它应该转到Index
中的ProductFormController
操作(使用FormName = mobile),但事实并非如此。有什么问题?
答案 0 :(得分:2)
在ASP.NET MVC中,路由机制以非常简单的方式工作,在第一个匹配时将重定向到该模式,忽略即将到来的模式。这就是为什么默认路线应该始终是最后一个。
您需要将"Admin_defaut"
路线移至最后。
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new {Controller="Home", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
name: "Product",
url: "Admin/ProductForm-{FormName}",
defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional }
);
}
正确实施:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
name: "Product",
url: "Admin/ProductForm-{FormName}",
defaults: new { controller = "ProductForm", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new {Controller="Home", action = "Index", id = UrlParameter.Optional }
);
}