ASP.NET MVC 3 直到我膝盖中了一箭【2】MVC 项目结构
ASP.NET MVC 框架包括 Visual Studio 项目模板,该模板可帮助您创建为支持 MVC 模式而构造的 Web 应用程序。此模板可创建一个新的 MVC Web 应用程序,该应用程序被配置为具有必需的文件夹、项模板和配置文件项。
1.环境
- Visual Studio 2010
- Visual Studio 2010 SP1
- AspNetMVC3Setup
- AspNetMVC3Setup_CHS
2.MVC 项目结构
默认情况下,MVC 项目包括以下文件夹:
- App_Data,这是数据的物理存储区。此文件夹的作用与它在使用 Web 窗体页面的 ASP.NET 网站中的作用相同。
- Content,建议在此位置添加内容文件,如级联样式表文件、图像等。通常,Content 文件夹用于存储静态文件。
- Controllers,建议在此位置存储控制器。MVC 框架要求所有控制器的名称均以“Controller”结尾,如 HomeController、LoginController 或 ProductController。
- Models,这是为表示 MVC Web 应用程序的应用程序模型的类提供的文件夹。此文件夹通常包括定义对象以及定义与数据存储交互所用的逻辑的代码。通常,实际模型对象将位于单独的类库中。但是,在创建新应用程序时,您可以将类放在此处,然后在开发周期中稍后的某个时刻将其移动到单独的类库中。
- Scripts,建议在此位置存储支持应用程序的脚本文件。默认情况下,此文件夹包含 ASP.NET AJAX 基础文件和 jQuery 库。
- Views,建议在此位置存储视图。视图使用 ViewPage (.aspx)、ViewUserControl (.ascx) 和 ViewMasterPage (.master) 文件,以及与呈现视图相关的任何其他文件。在 Views 文件夹中,每个控制器都具有一个文件夹;该文件夹以控制器名称前缀命名。例如,如果控制器名为 HomeController,则 Views 文件夹包含名为 Home 的文件夹。默认情况下,当 ASP.NET MVC 框架加载视图时,它将在 Views/控制器名称 文件夹中寻找具有请求的视图名称的 ViewPage (.aspx) 文件。默认情况下,Views 文件夹中也有一个名为 Shared 的文件夹,但该文件夹不与任何控制器相对应。Shared 文件夹用于存储在多个控制器之间共享的视图。例如,您可以将 Web 应用程序的母版页放在 Shared 文件夹中。
3.全局 URL 路由默认值
除了使用前面列出的文件夹之外,MVC Web 应用程序还使用 Global.asax 文件中的代码来设置全局 URL 路由默认值,并且使用 Web.config 文件来配置应用程序。路由在 Global.asax 文件的 Application_Start 方法中初始化。下面的示例演示一个包含默认路由逻辑的普通 Global.asax 文件
。
1 public static void RegisterGlobalFilters(GlobalFilterCollection filters)
2 {
3 filters.Add(new HandleErrorAttribute());
4 }
5
6 public static void RegisterRoutes(RouteCollection routes)
7 {
8 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 要忽略的路由的URL模式直接访问.axd文件
9 routes.MapRoute(
10 "Default", // 路由名称
11 "{controller}/{action}/{id}", // 带有参数的 URL
12 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值www.2cto.com
13 );
14
15 }
16
17 protected void Application_Start()
18 {
19 AreaRegistration.RegisterAllAreas();
20
21 RegisterGlobalFilters(GlobalFilters.Filters);
22 RegisterRoutes(RouteTable.Routes); // 应用程序启动时注册URL路由
23 }
4.MVC 框架和回发
ASP.NET MVC 框架不使用 ASP.NET Web 窗体回发模型与服务器交互,而是会将所有最终用户交互路由到 controller 类。这样可使 UI 逻辑与业务逻辑保持分开并有助于提高可测试性
作者 依信依誉