背景,ASP.NET MVC裡,頁面路徑一般是 ~/Area/Controller/Action。
同事為了菜單路徑有所區別,寫了一堆控制器。但是按照業務結構,這些控制器都應該從屬於某個控制器之下,現在卻變成與之並列了。
其實可以通過設定路由來解決這個問題。即取消這堆“子”控制器,將它們的代碼移植到“父”控制器中,然後在路由規則裡假裝還有這些控制器。
路由規則:
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "OneMap_RedTide", "OneMap/RedTide/{action}/{id}", defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional } ); context.MapRoute( "OneMap_AAlgae", "OneMap/AAlgae/{action}/{id}", defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional } ); context.MapRoute( "OneMap_Cyanobacteria", "OneMap/Cyanobacteria/{action}/{id}", defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional } ); context.MapRoute( "OneMap_Protozoa", "OneMap/Protozoa/{action}/{id}", defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional } ); //以上4條路由規則,都實質指向控制器Pop(原理詳見底部相關文章),但訪問地址都可以各自寫成假的控制器: /* ~/OneMap/RedTide/** ~/OneMap/AAlgae/** ~/OneMap/Cyanobacteria/** ~/OneMap/Protozoa/** 等同於: ~/OneMap/Pop/** ~/OneMap/Pop/** ~/OneMap/Pop/** ~/OneMap/Pop/** */ //系統預設路由 context.MapRoute( "OneMap_default", "OneMap/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );}
相關文章:
對ASP.NET MVC 的路由一點理解