17.3 ASP.NET MVC原理

  运行了ASP.NET MVC应用程序后,就能够通过相应的地址访问不同的页面。在ASP.NET MVC应用程序中,应用程序中页面的URL并不是在服务器中实际存在的页面或目录而是访问了相应的方法,ASP.NET MVC应用程序通过Global.ascx和Controllers实现了URL映射。

17.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中读取数据并存储在相应的变量中,如图17-12所示。
ASP.NET MVC运行流程
图17-12 ASP.NET MVC运行流程
  正如图17-12所示,在用户进行页面请求时,首先这个请求会发送到Controllers中,Controllers从Models中读取相应的数据并填充Controllers中的变量,Controllers接受相应请求再将请求发送到Views中,Views通过获取Controllers中的变量的值进行整合并生成相应的页面到用户浏览器中。
  在Models中需要将数据库抽象成面向对象中的一个对象,开发人员能够使用LINQ进行数据库的抽象,这样就能够方便的将数据库中的数据抽象成相应的对象并通过对象的方法进行数据的存取和更新。

17.3.2 ASP.NET MVC工作原理
  正如上一节中讲解的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文件相应代码如下所示。
+展开
-C#
        public static void RegisterRoutes(RouteCollection routes)//注册路由
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = "" }//配置路由
            );
        }

  上述代码中实现了映射操作,具体是如何实现可以先无需关心,首先需要看看Controllers文件夹内的文件,以及Views文件夹的文件,如图17-13所示。
Controller文件夹和Views文件夹
图17-13 Controller文件夹和Views文件夹
  从图17-13中可以看出,在Views中包含Home文件夹,在Home文件夹中存在About.aspx和Index.aspx文件,而同样在Controllers文件夹中包含与Home文件夹同名的HomeController.cs文件。当用户访问http://localhost:2448/Home/About路径时,首先该路径请求会传送到Controller中。
  注意:在Controllers文件夹中创建HomeController.cs文件同Home是同名文件,在Controllers中创建的文件,其文件名后的Controller.cs是不能更改的,所以HomeController.cs文件也可以看做是Home文件夹的同名文件。
  在Controller中,Controller通过Global.ascx文件和相应的编程实现路径的映射,示例代码如下所示。
+展开
-C#
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult About()//实现About页面
        {
            ViewData["Title"] = "About Page";
            return View();//返回视图
        }
    }

  上述代码实现了About页面的页面呈现,在运行相应的方法后会返回一个View,这里默认返回的是与Home的About方法同名的页面,这里是about.aspx,about.aspx页面代码如下所示。
+展开
-HTML
<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="_17_1.Views.Home.About" %>

    <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
        <h2>About Us</h2>
        <p>
            TODO: Put <em>about</em> content here.
        </p>
    </asp:Content>

  将about.aspx页面中的文字进行相应的更改,示例代码如下所示。
+展开
-HTML
<asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>About Us</h2>
    <p>
        <span style=”color:red”>这是一个关于页面</span>
    </p>
</asp:Content>

  运行about.aspx页面,运行后如图17-14所示。
修改后的About Us页面
图17-14 修改后的About Us页面
  从上述代码可以看出,Controllers与Global.ascx用于URL的映射,而Views用于页面的呈现。从这里可以看出,当用户访问http://localhost:2448/Home/About页面时,访问的并不是服务器中的/Home/About页面,而访问的是Controllers中的HomeControllers的About方法。
  注意:ASP.NET MVC应用程序中的URL路径访问的并不是一个页面,而是一个方法,例如访问/Home/About页面就是访问的是HomeControllers中的About方法,而访问/Account/Login页面就是访问的是AccountControllers中的Login方法。
  在ASP.NET MVC应用程序中,ASP.NET MVC应用程序的对应关系如图17-15所示。
ASP.NET MVC应用程序关系图
图17-15 ASP.NET MVC应用程序关系图
  在ASP.NET MVC应用程序中,HomeController.cs对应Views的Home文件夹,而其中的Index方法和About方法对应Index.aspx文件和About.aspx文件。
  注意:在命名时,默认情况下XXXController.cs对应Views的XXX文件夹,而其中XXXController.cs中的YYY()方法对应XXX文件夹中的YYY.aspx,而访问路径为XXX/YYY是访问的是XXXController.cs中的YYY()方法。
  实现相应的URL映射需要通过修改Global.ascx文件进行实现,如何通过修改Global.ascx文件进行不同的URL映射将在后面的小结中讲解。

加支付宝好友偷能量挖...


评论(0)网络
阅读(147)喜欢(0)Asp.Net/C#/WCF