ASP.NET MVC框架提供了支持Visual Studio的工程模板。本文介绍ASP.NET MVC应用程序的执行过程分析。
创立一个简略的ASP.NET MVC应用程序
ASP.NET MVC结构供给了支撑Visual Studio的工程模板,然后让你创立支撑MVC形式的Web应用程序。
这些MVC工程模板包含:
“ASP.NET MVC Web Application”模板
“ASP.NET MVC Web Application and Test”模板
这些模板能够用于创立一个新的依据ASP.NET MVC结构的Web应用程序。在这些程序中,你能够运用文件夹,模板以及装备文件等手法装备它们。
默许情况下,当你运用“ASP.NET MVC Web Application and Test”模板创立一个新的Web应用程序时,Visual Studio将创立一个增加有两个工程的计划。***个工程是一个Web工程,你能够在其间完成你的应用程序。第二个工程是一个测验工程,你能够在此为你的MVC组件编写单元测验。
【留意】“ASP.NET MVC Web Application”模板依据“ASP.NET Web Application”模板。所以,在创立依据ASP.NET MVC结构的网站时,你需求从“File”菜单下挑选“New Project”,然后挑选一个新的ASP.NET MVC工程,而不是挑选“New Website”。
***,你能够运用任何与.NET结构兼容的单元测验结构来测验ASP.NET MVC应用程序。留意,Visual Studio 2008 Professional(以及Team System)现已供给了关于MSTest测验工程的内置的支撑。
Web应用程序的MVC工程架构
当你创立一个ASP.NET MVC应用程序工程时,诸MVC组件将依据如图1所示的工程文件夹加以别离:
图1—一个ASP.NET MVC应用程序的典型架构
Views文件夹。该Views文件夹是引荐的放置你的视图的方位。视图组件首要运用.aspx,.ascx和.master文件完成;此外,也有或许运用其他任何与视图有相关的文件。Views文件夹下针对每一个控制器都供给一个独立的文件夹,而且此文件夹以该控制器的姓名为前缀命名。例如,假如你有一个姓名为HomeController的控制器,那么你的Views文件夹下应该包含一个姓名为Home的文件夹。默许情况下,当ASP.NET MVC结构加载一个视图时,它将首先在Views\controllerName文件夹下运用要求的视图名查找一个相应的.aspx文件。此外,还存在一个缺省姓名为Common的文件夹,不过它没有对应任何控制器。你能够在这个方位放置母版页面,脚本,CSS文件,以及其它当生成视图时所运用的文件。
Controllers文件夹。Controllers文件夹是引荐的放置控制器的方位。
Models文件夹。该Models文件夹是引荐的放置你的MVC Web应用程序的模型的方位。典型情况下,这里会包含界说与数据存储进行交互的逻辑代码,还有目标界说等等。
App_Data。App_Data文件夹对应存储数据的物理方位。这个文件夹与在ASP.NET Web应用程序中的人物相同。
除了上面罗列的文件夹外,一个MVC Web应用程序还运用下列一些重要的应用程序元素:
Global.asax和Global.asax.cs。在文件Global.asax.cs的Application_Start办法中完成对路由的初始化。下面的代码展现了一个典型的Global.asax文件,其间包含了默许的路由逻辑。
- publicclassGlobal:System.Web.HttpApplication
- {
- protectedvoidApplication_Start(objectsender,EventArgse)
- {
- //留意:假如把下列表达改写成Url="{controller}.mvc/{action}/{id}"即可主动支撑IIS6
- RouteTable.Routes.Add(newRoute
- {
- Url="{controller}/{action}/{id}",
- Defaults=new{action="Index",id=(string)null},
- RouteHandler=newMvcRouteHandler()
- });
- RouteTable.Routes.Add(newRoute
- {
- Url="Default.aspx",
- Defaults=new{controller="Home",action="Index",id=(string)null},
- RouteHandler=newMvcRouteHandler()
- });
- }
- }
装备文件。MVC Web应用程序装备文件Web.config担任注册HTTP模块。在httpModules节中完成注册UrlRoutingModule类,这个类担任分析URL而且把恳求路由到恰当的处理器。留意,这个进口能够支撑应用程序在同一个工程中宿主MVC与非MVC处理器。
下列代码展现了一个ASP.NET MVC应用程序的httpModules节的内容:
- <httpModules>
- <addname="UrlRoutingModule"
- type="System.Web.Mvc.UrlRoutingModule,
- System.Web.Extensions,Version=3.6.0.0,Culture=neutral,
- PublicKeyToken=31BF3856AD364E35"/>
- </httpModules>
当你在Visual Studio 2008 Professional(或Team System)挑选一个ASP.NET MVC Web应用程序和测验工程模板时,计划中将主动包含一个测验工程。你能够运用MVC模板来创立测验以及内涵接口的mock完成。
了解MVC工程的履行进程
一个发送到ASP.NET MVC的Web应用程序恳求首先要传递到UrlRoutingModule目标(这是一个HTTP模块)。然后,UrlRoutingModule目标分析该恳求并履行路由挑选。值得留意的是,UrlRoutingModule将挑选匹配当时恳求的***个路由(Route)目标。
接下来,UrlRoutingModule目标从挑选的路由目标中获得IHttpContext目标—由它进一步处理恳求。默许情况下,这个IHttpContext便是MvcHandler目标。然后,MvcHandler目标进一步挑选相应的控制器,终究由此控制器来处理该恳求。
【留意】当一个ASP.NET MVC Web应用程序运转于IIS7环境下时,并不要求为MVC工程指定文件的扩展名。但是,在IIS6中,处理器要求你把.mvc文件扩展名映射到ASP.NET ISAPI中。
模块和处理器成为指向ASP.NET MVC结构的进口,并履行下列动作:
◆在一个MVC Web应用程序中挑选恰当的控制器
◆获取一个特定的控制器实例
◆调用该控制器的Execute办法
表格1更详尽地描绘了一个MVC Web工程的各个履行阶段。
表格1—MVC Web工程的各个履行阶段
阶段 |
详细描绘 |
初始恳求 |
在Global.asax文件中,把路由增加到RouteTable目标。 |
路由 |
UrlRoutingModule模块依据RouteTable实例中匹配的Route目标创立RouteData目标。这些路由数据用于决议所恳求的控制器及要调用的行为。 |
映射到控制器 |
MvcRouteHandler处理器担任依据RouteData实例中的数据创立控制器类型名。 |
调用控制器构建程序(controllerbuilder) |
处理器调用ControllerBuilder类的大局静态CreateController办法然后得到一个IController实例。假如没有回来一个IController实例,那么该处理器将回来一个HTTP 500过错指示呈现了服务器过错。 |
创立控制器 |
由ControllerBuilder实例直接创立一个新的控制器,或运用一个IControllerFactory目标来创立该控制器。 |
履行控制器 |
MvcHandler实例被增加到ControllerContext目标中并调用该控制器的Execute办法。 |
小结
在本文中,咱们对微软***推出的MVC(模型—视图—控制器)形式进行了理论的分析,并把它与传统的ASP.NET Web表单形式和页面回寄计划进行了比照。在了解了MVC结构各组件首要功用之后,***咱们对一个典型的MVC Web工程的各个履行阶段作了大略的概括。
***需求留意的是,ASP.NET MVC形式是微软***推出的一种开发形式,现在***测验版别为Preview 2(Preview 3也行将面世)。因而,这一形式是否较之于ASP.NET Web表单形式更有利于进步软件的出产功率还有待于开发实践的查验。
本文来自朱先忠的博客:《ASP.NET 3.5 MVC结构深度解析》。
【修改引荐】
- 有关ASP.NET MVC结构的一些基础知识
- Scott Gu教你运用ASP.NET MVC 2新功用
- 微软发布ASP.NET MVC 2预览版 多项功用更新
- 13个不行不知的ASP.NET MVC扩展点
- 学习ASP.NET MVC的基本概念