http://localhost:50526/Blog/Blog/ShowRecent格式:
RootUrl / AreaName / ControllerName / ActionName
刚刚发现MVC区域,它似乎是组织代码的好方法,即为每个部分创建一个区域,在我的情况下,每个部分都有自己的控制器.这意味着每个AreaName = ControllerName.这样做的效果是Url例如/ Blog / Blog /上面的双AreaName / ControllerName路径
没有对路由的完全清楚的了解,我如何设置路由不显示AreaName?
编辑:
我试图减少路由的工作量,因为它们似乎会相互影响(即需要特定的排序),并可能导致严重的头痛:-)在将现有的Webform应用转换为MVC时,我已经转换了几个核心部分,它们每个都有一个控制器和大量的视图/动作,尽管大多数数据访问是代码在组件中,Model / ViewData类的数量正在增长…我正在根模型/视图中创建子文件夹这些部分(或区域)的文件夹,并希望创建区域将以相同的方式工作,除了组织代码(使用覆盖该区域的基本路线)
对此有任何评论吗?
解决方法
要克服这一点,您可以根据该路由中存在的控制器名称,在路由上添加正则表达式过滤器.缺点?您将无法在应用程序中使用相同名称的两个控制器(至少不使用标准路由.您可以随时想到不同的路由来访问它们))
结束了这个结构:
/Areas
/Areas/Blog/Controllers/BlogController.cs
/Areas/Blog/Controllers/FeedController.cs
/Areas/User/Controllers/UserController.cs
/Controllers/PageController.cs
你应该是这样的:
在BlogAreaRegistration.cs中:
context.MapRoute( "Blog_default","{controller}/{action}/{id}",new { action = "Index",id = UrlParameter.Optional },new { controller = "(Blog|Feed)" } );
在UserAreaRegistration.cs中:
context.MapRoute( "User_default",new { controller = "(User)" } );
在Global.asax.cs中:
public static void RegisterRoutes(RouteCollection routes) { context.MapRoute( "Default",new { controller = "Home",action = "Index",id = UrlParameter.Optional } ); } protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterRoutes(RouteTable.Routes); }
请注意,在global.asax地区注册首先!