作为旁注,我了解整个模棱两可的控制器名称问题,并使用命名空间来使我的路由正常工作,所以我认为这不是问题。
到目前为止,我有我的项目级控制器,然后是具有以下注册的用户区:
public class UserAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "User";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"UserHome",
"User/{id}",
new { action = "Index", controller = "Home", id = 0 },
new { controller = @"Home", id = @"\d+" }
);
context.MapRoute(
"UserDefault",
"User/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
“UserHome”路线在那里,所以我可以允许路线/User/5
与/User/Home/Index/5
看起来更清洁的 IMO。
理想情况下,我想使用Url.RouteUrl("UserHome", new { id = 5 })
, 在其他地方生成路线,但这总是返回空白或给我一个异常,说它找不到路线名称,这显然是存在的。
但是,当我使用它时,Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 })
它没有问题。
当路由映射中已经有默认值时,为什么我必须指定动作和控制器?我错过了什么?