ASP.NET MVC 3区域 - 无法使用自定义路由查找视图

时间:2012-01-24 01:30:27

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

我在一个地区有一条自定义路线,如下所示:

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() })
            );

示例网址:

  

/搜索/社区功能于新纽约城

解决行动正常。但它无法找到视图。

  

未找到视图“索引”或其主控或没有查看引擎   支持搜索的位置。以下地点是   搜索:〜/ Views / Search / Index.cshtml   〜/查看/共享/ Index.cshtml

该视图位于〜/ Areas / Search / Views / Search / Index.cshtml

为什么不看那里?

如果我context.MapRoute代替context.Routes.Add,则可行。所以它似乎与我使用自定义路线的事实有关?

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

感谢this answer

解决了这个问题

我制作了自定义路由器IRouteWithArea(在ctor中接收),并相应地更新我的注册:

context.Routes.Add(
                "SearchIndex - By Location - USA",
                new CountryTypeSpecificRoute(
                    CountryType.UnitedStates,
                    "search/{locationType}-in-{query}",
                    new { controller = "Search", action = "Index", query = UrlParameter.Optional },
                    new { locationType = new UsaLocationSearchRouteConstraint() },
                    "Search")
            );

请注意最后一个参数“搜索” - 区域名称。

不知道它是如何工作的,但确实如此。猜猜内部路由引擎会查找实现IRouteWithArea的路由。

问题解决了!