我的解决方案结构如下:
Areas
- Games
-Controllers
-Views etc
- Movies
-Controllers
- MoviesController.cs
- MovieCalendarController.cs
- MovieSearchController.cs
-Views etc
Run Code Online (Sandbox Code Playgroud)
现在我想要能够做到这一点:导航到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 }
);
}
Run Code Online (Sandbox Code Playgroud)
道歉,我是领域和路线的新手
更新
使用属性路由后,我遇到了这个问题:
找到了与URL匹配的多种控制器类型.如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情
该请求已找到以下匹配的控制器类型:MovieCalendar.UI.Areas.Movies.Controllers.MovieCalendarController MovieCalendar.UI.Areas.Movies.Controllers.MoviesController
电影控制器
[RouteArea("Movies")]
[Route("{action}")]
public class MoviesController : BaseController
{
}
Run Code Online (Sandbox Code Playgroud)
日历控制器
[RouteArea("Movies")]
[RoutePrefix("Calendar")]
[Route("{action=Index}")]
public class MovieCalendarController : BaseController
{
}
Run Code Online (Sandbox Code Playgroud)
访问URL http:// localhost/Movies/Calendar时会发生这种情况,希望它能带我进入MovieCalendarController
Index操作方法.我可以看出它为什么抱怨,因为在被MovieController
调用的Calendar
(可能没有)中可能有一个ActionMethod .
使用属性路由可能会更好。它会让你这样做:
public class MoviesController : Controller {
[Route("Movies")]
public ActionResult Index() {
return this.View();
}
}
public class MovieCalendarController : Controller {
[Route("Movies/Calendar")]
public ActionResult Index() {
return this.View();
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以摆脱当前的路由映射并使用它初始化你的路由:
RouteTable.Routes.MapMvcAttributeRoutes();
Run Code Online (Sandbox Code Playgroud)
更新
[RouteArea("Movies")]
[Route("{action}")]
public class MoviesController : BaseController
{
}
Run Code Online (Sandbox Code Playgroud)
此路由将匹配以Movies/开头的 url ,后跟任何字符串,包括Calendar。所以这条路线会与以下内容发生冲突:
[RouteArea("Movies")]
[RoutePrefix("Calendar")]
[Route("{action=Index}")]
public class MovieCalendarController : BaseController
{
}
Run Code Online (Sandbox Code Playgroud)
对于控制器使用的命名约定,基于约定的路由将会很困难。
归档时间: |
|
查看次数: |
5031 次 |
最近记录: |