ASP.NET MVC 3 区域 - 使用自定义路由找不到视图

4

我有一个位于区域内的自定义路由,如下所示:

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() })
            );

示例URL:

/search/neighborhoods-in-new-york-city

可以成功解析该操作。但是它无法找到视图。

未找到视图“Index”或其母版,也没有视图引擎支持所搜索的位置。已搜索以下位置:~/Views/Search/Index.cshtml ~/Views/Shared/Index.cshtml

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

为什么它没在那里查找?

如果我使用context.MapRoute而不是context.Routes.Add,它可以工作。因此,似乎与我使用的自定义路由有关?

有任何想法吗?

1个回答

5

感谢这个答案,我解决了问题。

我让我的自定义路由实现IRouteWithArea(在构造函数中引入),并相应地更新了我的注册:

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")
            );

请注意最后一个参数“Search”-它是区域名称。
我不知道它是如何工作的,但它确实起作用。猜测内部路由引擎会寻找实现了IRouteWithArea的路由。
问题解决了!

1
太棒了!我甚至没有在寻找这个解决方案的时候发现了它...但我已经遇到过这种情况好几次了! - SoWeLie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接