快速业务通道

ASP.NET MVC案例教程(基于ASP.NET MVC beta)—第三篇:ASP.NET MVC全局观

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

前言

在上一篇文章中,我们实现了第一个ASP.NET MVC页面。对于没有接触过这个框架的朋友来说,可能对有些地方会迷惑,所以这 篇文章我将通过图示配合文字的方法,站在全局的角度介绍一些ASP.NET MVC的运行机制,这样可以帮助朋友们更好的理解后续文章。 ^_^

全局

首先我们来看一副图片,由于这幅图是我自己画的,不是摘自微软官方,所以如果有什么不到位的地方还望海涵!

ASP.NET MVC案例教程(基于ASP.NET MVC beta)—第三篇:ASP.NET MVC全局观

首先,用户通过Web浏览器向服务器发送一条 url请求,这里请求的url不再是xxx.aspx格式,而是http://HostName/ControllerName/ActionName/Parameters的样子。这个请求被ASP.NET MVC的路由映射系统截获。(路由映射可以在Global.asax中配置,我们一会再说)路由映射系统按照映射规则,解析出控制器名 ControllerName,Action名ActionName和各个参数Parameters,然后,找寻Controllers目录下的ControllerNameController.cs这个控制器类 ,默认情况下,系统总是找寻Controllers目录下的“控制器名+Controller”这么一个类,然后,找寻这个类下与ActionName同名 的方法,找到后,将Parameters作为参数传给这个方法,而后Action方法开始执行,完成后返回相应视图,默认情况下,会返回Views目录下与 ControllerName同名的目录下的与ActionName同名的aspx文件,并且将ViewData传递到视图。ViewData中一般包含了控制视图显示的控制量以 及视图显示需要的数据。

我们按以上思路回顾一下上一篇中主页的请求过程。我们传递的url是http://localhost/Home/Index。默认路 由规则下,将ControllerName设为“Home”,ActionName设为“Index”,没有参数。于是系统找寻Controllers目录下 的HomeController类的Index方法,成功找到,于是执行之。这个方法调用Mock的Model取出一些数据,放入ViewData相应键值项里。然后返回 视图,返回的是Views下Home下的Index.aspx。这个视图取出ViewData中的数据按照一定格式呈现,于是完成了一次典型的ASP.NET MVC调用。

路由

从上面可以看出,ASP.NET MVC中路由是很重要的。它直接决定了如何解析url,因此决定了系统如何工作。那么,下面我 们来揭开路由神秘的面纱。

打开我们Demo下的Global.asax.cs文件,可以看到如下代码:

Global.asax.cs:

1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Mvc;
6using System.Web.Routing;
7
8namespace MVCDemo
9{
10  // Note: For instructions on enabling IIS6 or IIS7 classic mode,
11  // visit http://go.microsoft.com/? LinkId=9394801
12
13  public class MvcApplication : System.Web.HttpApplication
14  {
15    public static void RegisterRoutes(RouteCollection routes)
16    {
17      routes.IgnoreRoute("{resource}.axd/ {*pathInfo}");
18
19      routes.MapRoute(
20        "Default",                        // Route name
21        "{controller}/{action}/{id}",               // URL with parameters
22        new { controller = "Home", action = "Index", id = "" } // Parameter defaults
23      );
24
25    }
26
27    protected void Application_Start()
28    {
29      RegisterRoutes(RouteTable.Routes);
30    }
31  }
32}

我们拣重点说。注意上面有个routes.MapRoute方法。这个方法的作用是向系统增加一条路由规则。这里唯一的一条规则 是系统默认增加的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号