【问题标题】:ASP.Net MVC routes confusionASP.Net MVC 路由混乱
【发布时间】:2011-04-14 20:59:10
【问题描述】:

我的 ASP.Net MVC 2 站点有以下 URL:

http://localhost:1919/TimeEntry/SummaryForWeek/15/2011

http://localhost:1919/TimeEntry/SummaryForMonth/4/2011

这两个都走这条路:

            routes.MapRoute
        (
            "TimeEntryActionMonthYear", // Route name
            "TimeEntry/{action}/{month}/{year}", // URL with parameters
            new { controller = "TimeEntry", action = "Summary", month = UrlParameter.Optional, year = UrlParameter.Optional } // Parameter defaults
        );

SummaryForWeek 的操作需要一个名为“weekNumber”的参数(上面 URL 中的 15 值),而正在使用的路由正在传递一个名为“month”的参数,因此 weekSummary 的 URL 失败。将 SummaryForWeek 的参数从一周重命名为一个月是没有意义的,只是为了让路由正常工作。

我是否应该将路由添加到路由表,其中 {action} 硬编码为“SummaryForWeeks”?这也没有意义,因为它会使路由表膨胀。

我有什么不明白的(我知道这为我打开了一些有创意的 cmets 的大门)?我被卡住了。

谢谢

汤姆

【问题讨论】:

标签: asp.net-mvc-2 routes


【解决方案1】:

您要么需要两条路由,要么需要一个更通用的参数名称:

TimeEntry/{action}/{subdivision}/{year}

或类似的东西。那么这两个动作都必须采用这两个参数,一个解释为月,另一个解释为周。

【讨论】:

  • 我认为这是我必须采取的路线。这实际上很糟糕。处理器应该能够从 URL 中识别动作,在控制器中找到动作,然后按照参数在 URL 中出现的顺序开始将参数与动作的参数签名匹配。这样,您就不必担心命名问题。这是错误的看待它的方式吗?感谢您的帮助。
猜你喜欢
  • 2016-09-08
  • 2016-04-26
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多