【问题标题】:Routing not working after update to Mvc 3更新到 Mvc 3 后路由不起作用
【发布时间】:2012-01-31 17:28:51
【问题描述】:

我刚刚将我的 Asp.Net Mvc 2 项目更新为 Mvc 3,突然我的链接停止工作。当我打开一个页面时,页面上的所有链接都会重定向回自身。

此外,一些重定向到以前在以前版本中有效的操作不再有效。它一直说“路由表中没有路由与提供的值匹配。”。我使用 RouteDebug 查看发生了什么,但找不到任何问题。

更新

这是我正在使用的路线之一:

// ** Standard route. **
     context.MapRoute(
        "group_default", // Route name
        "{language}/{organisation}/Research.aspx/{controller}/{action}/{organisationId}/{parameter}/",
        // URL with parameters
        new
        {
           area = "research",
           language = "en-US",
           organisation = "",
           controller = "Home",
           action = "Index",
           organisationId = UrlParameter.Optional,
           parameter = UrlParameter.Optional
        }, // Parameter defaults
        new[] { "Project.Web.Areas.Research.Controllers" }
     );

正如您在下面我的回答中看到的那样,问题是由两个 UrlParameter.Optional 一个接一个引起的。这是 Mvc 3 中的一个错误

【问题讨论】:

  • 我们当然需要查看路线,为什么不首先添加它们呢???
  • 在这里大胆猜测:您的路线未正确注册。您在.asax 文件中设置的路由是使用一堆需要大量字符串的重载方法设置的。也许他们改变了这些参数的顺序?否则,如果您使用默认路由系统,则您的控制器未注册(或不在包含的命名空间中)。在没有看到您的几个控制器和.asax 文件的情况下,我只能说这些。

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

哇,经过大约 4 小时的调试,我发现了问题:这是 Mvc 3 中的一个错误。由于该错误,不可能同时使用两个 UrlParameter.Optional。 Phil Haack 有一篇不错的博文:http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

希望这会帮助其他人(并节省他们一些时间)

【讨论】:

  • 这对任何人都无济于事,因为您从未在问题中包含路线,这会导致人们准确地告诉您您花了 4 个小时才找到的确切内容。请再次在问题中包含您的路线。另外,这个问题之前在 Stack Overflow 上出现过:stackoverflow.com/questions/7085762/…
  • 我已经在问题中包含了路线。因为你提到的问题中的症状与我的不同,所以它没有出现在我的搜索结果中。
猜你喜欢
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
相关资源
最近更新 更多