ASP.NET MVC项目视图是否需放在特定文件夹及是否存在优先级?
ASP.NET MVC 5 视图相关问题解答
问题1:ASP.NET MVC 5项目的不同视图之间是否存在优先级排序规则?
存在明确的视图查找优先级规则,MVC 5框架定位视图时会按照固定顺序检索路径,优先级从高到低如下:
- 非区域控制器的检索顺序:
- 第一优先级:当前控制器对应目录下的视图
~/Views/[ControllerName]/[ViewName].cshtml(VB项目对应后缀为.vbhtml,下同) - 第二优先级:全局共享目录下的视图
~/Views/Shared/[ViewName].cshtml
- 第一优先级:当前控制器对应目录下的视图
- 区域(Area)内控制器的检索顺序:
- 第一优先级:区域内对应控制器目录下的视图
~/Areas/[AreaName]/Views/[ControllerName]/[ViewName].cshtml - 第二优先级:区域内共享目录下的视图
~/Areas/[AreaName]/Views/Shared/[ViewName].cshtml - 第三优先级:全局共享目录下的视图
~/Views/Shared/[ViewName].cshtml
- 第一优先级:区域内对应控制器目录下的视图
以上所有路径都检索不到对应视图时,框架会抛出视图未找到的异常。如果自定义了ViewLocationExpander,可以修改默认的查找优先级和检索路径。
问题2:项目中的视图是否需要存放在独立的特定文件夹内,才能保障项目正常运行?
默认配置下需要遵循约定的文件夹结构才能正常运行,这是ASP.NET MVC 约定大于配置 原则的典型体现,默认规则要求:
- 单个控制器对应的业务视图存放在
~/Views/[对应控制器名称]目录下 - 多控制器共用的布局页、部分视图、错误页等公共视图存放在
~/Views/Shared目录下 - 区域内的所有视图存放在对应Area下的Views目录中
但该规则不是强制不可修改的:你可以通过自定义视图引擎、修改ViewLocationFormats属性的方式,自定义框架检索视图的路径,配置完成后视图存放在任意指定路径都可以正常加载,无需遵循默认文件夹结构。
内容的提问来源于stack exchange,提问作者Big Moustache guy
相关产品推荐
相关产品推荐

