rya*_*lit 16 url-routing asp.net-mvc-routing asp.net-mvc-4
作为旁注,我理解整个模糊的控制器名称问题,并使用命名空间来使我的路由工作,所以我不认为这是一个问题.
到目前为止,我有我的项目级控制器,然后是一个具有以下注册的用户区:
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 }
);
}
}
Run Code Online (Sandbox Code Playgroud)
"UserHome"路线在那里,所以我可以允许路线/User/5与/User/Home/Index/5看起来更清洁的IMO.
理想情况下我想使用Url.RouteUrl("UserHome", new { id = 5 }),在其他地方生成路线,但这总是要么空白或者给我一个例外,说它找不到路线名称,这显然就在那里.
但是当我使用Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 })它时没有问题.
为什么我必须在路由映射中已经有默认值时指定操作和控制器?我错过了什么?
不确定是否有热修复,但现在的行为有点不同.使用您的确切代码并尝试:
Url.RouteUrl("UserHome", new { id = 5 })
Run Code Online (Sandbox Code Playgroud)
我现在得到:
/User/5?httproute=True
Run Code Online (Sandbox Code Playgroud)
这仍然看起来很尴尬,所以我尝试了路线并添加了另一个默认参数:
context.MapRoute(
"UserHome",
"User/{id}",
new { action = "Index", controller = "Home", area = "User", id = 0,
httproute = true },
new { controller = @"Home", id = @"\d+" }
);
Run Code Online (Sandbox Code Playgroud)
现在我用的时候
Url.RouteUrl("UserHome", new { id = 5 })
Run Code Online (Sandbox Code Playgroud)
我得到了一个很好的网址
/User/5
Run Code Online (Sandbox Code Playgroud)
免责声明httproute=true路线声明中可能存在不必要的副作用.
此外,更详细的使用:
@Url.RouteUrl("UserHome", new { controller = "Home", action = "Index", id = 5 })
Run Code Online (Sandbox Code Playgroud)
仍然有用.
我可以确认,至少在 .NET 4.5.1 和 MVC 5.2.2 中,此行为已得到修复,现在可以使用 .NET 相同的代码正常工作Url.RouteUrl("UserHome", new { id = 5 })。
看来这是一个自我发帖以来已修复的错误。
将此添加为答案,因为虽然 TSmith 的解决方案可行,但现在有了修复程序,您不再需要做额外的工作。
| 归档时间: |
|
| 查看次数: |
36456 次 |
| 最近记录: |