1 | ## |
##
应用场景:
ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的。如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所构成,因此,随着应用程序规模的增大,如何组织这些不同功能模块中的MVC三层的目录结构,有时对开发者来说显得是种负担。
另一个问题就是Controller不允許有相同命名的存在,偏偏模块中常有父子关系,有时子模块命名相同就会造成错误。
幸运的是,ASP.NET MVC允许开发者将应用划分为“区域”(Area)的概念。
1 | ## |
##
Area的路由
在添加好了区域之后,vs会自动帮我们注册Area的路由信息:
1 |
|
#`
##
问题
试想如果这时候有这样的情形:
如果有一个Area叫Database,在它的下面有一个Controller名字叫做Browse。
另外我在顶层也有一个Controller,名字也叫Browse。
那么我们在<span style="font-size: 13px; line-height: 1.6em;">输入http://localhost/Browse,我们得到的将是一个异常: Multiple types were found that match the controller named 'Browse'. </span>
而输入http://localhost/Database/Browse,我们却能够正常地访问到 MvcApplication.Areas.Database.Controllers.BrowseController。
#`
##
原来:
在注册Area的路由时,如果没有填写命名空间的话,则会默认使用Area所在的命名空间。如此一来,使用Area的路由在寻找Controller时,只会在Area所在的空间下寻找相应的Controller,那就不存在与顶层Controller的冲突问题了,可是顶层的同名Controller问题如何解决呢,这个好办,在顶层路由映射的时候主动加上命名空间吧,这样子就皆大欢喜,你用你的Browse,我用我的Browse,互不相干。
1 |
|
1 | ## |
注意后面的DataTokens.Add方法!
Done!