asp.net-mvc - ASP.NET MVC 3 路由破坏了 ActionLink 功能

标签 asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

我有一个 MVC 2,已迁移到 MVC 3。迁移后,我的 ActionLink 不再工作。我发现这是因为我的默认路由。

routes.MapRoute( "Default", "{controller}/{action}/{id}/{title}", new { controller = "Home", action = "Index", id = UrlParameter.Optional, title = UrlParameter.Optional } );

如果我将默认路由更改为 MVC 默认路由,它会再次正常工作。

routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } );

为什么标题可选参数会破坏我的 ActionLink?

最佳答案

问题不在于标题参数是可选的。在您的情况下, id 参数是可选的。只有路由定义的最后一个参数可以是可选的,并且此规则已在 ASP.NET MVC 3 中强制执行。这是一个 similar question关于这个话题。

因此,如果您想拥有这样的路由,请确保在生成这些链接时始终为 id 参数指定一个值:

@Html.ActionLink("text", "Index", new { id = "123" })

关于asp.net-mvc - ASP.NET MVC 3 路由破坏了 ActionLink 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5013182/

相关文章:

c# - 无法从 ASP.NET MVC 中的操作返回图像流

javascript - 如何使用在 Asp.net C# 中创建的 javascript 读取 cookie 值

c# - 从ViewModel访问数据库是否违反了MVC原则?

asp.net-mvc - 使用 DisplayAttribute 和自定义资源提供程序进行 ASP.NET MVC 3 本地化

asp.net-mvc - ASP.net MVC : Where to keep application data?

c# - 无法将 List<> 对象序列化/反序列化为 JSON

c# - .NET 4 MVC 2 带有注释警告而不是错误的验证

asp.net-mvc-3 - 如何在 mvc3 中使用简单注入(inject)器注册自定义 ModelMetadataProvider

asp.net-mvc-3 - 如何让 MVC 与 Dynamics CRM 配合使用?

jquery - 页面加载后部分渲染