10.3 ASP.NET MVC原理
学习目标
了解ASP.NET MVC运行流程和工作原理。
运行ASP.NET MVC应用程序后,就能够通过相应的地址访问不同的页面。在ASP.NET MVC应用程序中,应用程序中页面的URL并不是在服务器中实际存在的页面或目录而是访问了相应的方法,ASP.NET MVC应用程序通过Global.ascx和Controllers实现了URL映射。
10.3.1 ASP.NET MVC运行流程
在运行ASP.NET MVC应用程序后,会发现访问不同的ASP.NET MVC应用程序页面时,其URL路径并不会呈现相应的.aspx后缀。同样当访问相应的ASP.NET MVC应用程序页面时,在服务器中并不存在对应的页面。为了了解如何实现页面映射,就需要了解ASP.NET MVC应用程序的运行流程。
在ASP.NET MVC程序中,应用程序通过Global.ascx和Controllers实现URL映射。当用户进行ASP.NET MVC程序的页面请求时,该请求首先会被发送到Controllers控制器中,开发人员能够在控制器Controllers中创建相应的变量并将请求发送到Views视图中,Views视图会使用在Controllers控制器中通过编程方式创建的相应变量并在浏览器中呈现页面。当用户在浏览器中对Web应用进行不同的页面请求时,该运行过程将会循环反复。
对于Models而言,Controller通常情况下使用Models读取数据库。在Models中,Models能够将传统的关系型数据库映射成面向对象的开发模型,开发人员能够使用面向对象的思想进行数据库的数据存取。Controllers从Model中读取数据并存储在相应的变量中,如图10-2所示。
如图10-2所示,在用户进行页面请求时,首先这个请求会发送到Controllers中,Controllers从Models中读取相应的数据并填充Controllers中的变量,Controllers接受相应请求再将请求发送到Views中,Views通过获取Controllers中的变量的值进行整合并生成相应的页面到用户浏览器中。
在Models中需要将数据库抽象成面向对象中的一个对象,开发人员能够使用LINQ进行数据库的抽象,这样就能够方便地将数据库中的数据抽象成相应的对象并通过对象的方法进行数据的存取和更新,当然也可以使用传统的ADO.NET机制完成对数据库的访问操作。
10.3.2 ASP.NET MVC工作原理
在ASP.NET MVC应用程序中,系统默认创建了相应的文件夹进行不同层次的开发,在ASP.NET MVC应用程序的运行过程中,同样请求会发送到Controllers中,这样就对应了ASP.NET MVC应用程序中的Controllers文件夹,Controllers只负责数据的读取和页面逻辑的处理。在Controllers读取数据时,需要通过Models中的LINQ to SQL从数据库中读取相应的信息,读取数据完毕后,Controllers再将数据和Controller整合并提交到Views视图中,整合后的页面将通过浏览器呈现在用户面前。
当用户访问http://localhost:2448/Home/About页面时,首先这个请求会发送到Controllers中,Controllers通过Global.ascx文件中的路由设置进行相应的URL映射,其实Global.ascx是通过其“RouteConfig.RegisterRoutes (RouteTable.Routes);”这行代码来完成路由配置,也就是通过调用RouteConfig类的RegisterRoutes方法来完成的,RouteConfig类的位置如图10-3所示。
RouteConfig.cs源代码如下。
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new{controller = "Home",action = "Index",id = UrlParameter.Optional } ); } }
另外从图10-3中可以看出,在Views中包含Home文件夹,在Home文件夹中存在Create.aspx和Detail.aspx和Index.aspx文件,而同样在Controllers文件夹中包含与Home文件夹同名的HomeController.cs文件。当用户访问http://localhost:2448/Home/ Create路径时,首先该路径请求会传送到Controller中,从中寻找Create这个方法,然后再调用方法返回对应视图(View)为用户在浏览器中呈现。
共有条评论 网友评论