【发布时间】:2015-07-20 16:14:56
【问题描述】:
我的解决方案结构如下:
Areas
- Games
-Controllers
-Views etc
- Movies
-Controllers
- MoviesController.cs
- MovieCalendarController.cs
- MovieSearchController.cs
-Views etc
现在我希望能够做到这一点:
导航到https://localhost/Movies/ 并点击MoviesController.cs 的索引
导航到:https://localhost/Movies/Calendar/ 并点击MovieCalendarController.cs 的索引
最后导航到https://localhost/Movies/Search/ 并点击MovieSearchController.cs 的索引
我已经尝试过但没有工作(得到No route in the route table matches the supplied values.)错误:
MovieAreaRegistration.cs
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Movies_default",
"Movies/{action}/{id}",
new { controller = "Movies", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Calendar_default",
"Movies/Calendar/",
new { controller = "MovieCalendar", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"Search_default",
"Movies/Search/{action}/{id}",
new { controller = "MovieSearch", action = "Index", id = UrlParameter.Optional }
);
}
抱歉,我对区域和路线不熟悉
更新
使用属性路由后我陷入了这个问题:
找到多个与 URL 匹配的控制器类型。这个可以 如果多个控制器上的属性路由与请求的匹配,则会发生 网址。
请求找到了以下匹配的控制器类型: MovieCalendar.UI.Areas.Movies.Controllers.MovieCalendarController MovieCalendar.UI.Areas.Movies.Controllers.MoviesController
电影控制器
[RouteArea("Movies")]
[Route("{action}")]
public class MoviesController : BaseController
{
}
日历控制器
[RouteArea("Movies")]
[RoutePrefix("Calendar")]
[Route("{action=Index}")]
public class MovieCalendarController : BaseController
{
}
当访问 URL http://localhost/Movies/Calendar 时会发生这种情况,希望它将带我到 MovieCalendarController 索引操作方法。我可以看到它为什么会抱怨,因为在 MovieController 中可能有一个 ActionMethod,称为 Calendar(没有)。
【问题讨论】:
-
您是否在 global.asax Application_Start 中运行过类似的操作? Areas.MVC.MVCAreaRegistration.RegisterAllAreas() 其中 Areas.MVC.MVCAreaRegistration 是您的 RegisterAreas 方法的命名空间?
-
MovieAreaRegistration 是由 Visual Studio 创建的脚手架代码。在电影区域文件夹下。
标签: c# asp.net-mvc