asp.net mvc area区域

原创 Laughing  2017-12-06 15:08  阅读 84 次 评论 0 条

Area可以在原来的MVC项目中开辟一块单独的区域放置功能模块。独立出来的区域可以包含专用的M-V-C功能,也可以包含独立的路由和视图引擎。这里我们主要针对区域的创建以及区域相互调用还有路由限制进行简答的说明。

创建MVC项目后,会包含一个HomeController,这里我们为了演示,在建立一个名为Home的区域

路由冲突

Area创建完成后,如果我们直接访问,会提示

找到多个与名为“Home”的控制器匹配的类型。如果为此请求(“{controller}/{action}/{id}”)提供服务的路由没有指定命名空间以搜索与此请求相匹配的控制器,则会发生这种情况。如果是这样,请通过调用带有 'namespaces' 参数的 "MapRoute" 方法的重载来注册此路由。

出现这个的原因,是我们区域中的路由跟外部HomeController的路由发生了冲突,为了解决这个问题,我们必须对路由匹配规则进行限制。

路由限制

路由限制的方式由很多种,可以限制controller或者action等等,这里我们通过限制HomeController的命名空间来进行限制。

打开App_Start文件夹,找到RouteConfig.cs文件,修改RegisterRoutes方法如下

  1. public static void RegisterRoutes(RouteCollection routes)  
  2.         {  
  3.             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  4.   
  5.             routes.MapRoute(  
  6.              name: "Default",  
  7.              url: "{controller}/{action}/{id}",  
  8.              defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },  
  9.              namespaces: new[] { "me.lisen.WebUI.Controllers" }  
  10.              );  
  11.         }  

修改完成后,我们再次打开运行项目发现能正常打开了

通过routedebugger,我们可以看到首页匹配到了Home/Index上面

区域相互访问

创建完区域之后,我们可以外部需要访问内部区域,或者内部访问外部区域,这个可以通过便签助手,增加area属性解决。

比如我们外部需要访问内部Home区域,只需要在标签助手在区域即可

  1. <a href="@Url.Action("Index","Home",new { area="Home"})">前往内部首页</a>  

如果需要内部区域访问外部区域,将area设置成""即可

  1. <a href="@Url.Action("Index","Home",new { area=""})">前往外部首页</a>  
温馨提示

统一区域内相互访问时,不需要加area属性

本文地址:https://www.lisen.me/asp-net-mvc-area-region.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情