ASP.NET MVC 具体实现细节

来源:互联网 发布:c语言标识符的命名规则 编辑:程序博客网 时间:2024/05/16 06:45

上篇介绍了MVC2后,相信你肯定不屑一顾,那么好吧,我承认……现在正式开始介绍吧

ASP.NET MVC2的处理顺序为routes->controller->action(model)->view,而表现形式就是有一个路由表在Global.aspx.cs中,将Url解析后,传递数据到专门的Controller中的一个Action去处理(在XXXController.cs中),然后返回View(在XXX文件夹下的actionName.aspx中)注意,actionName与Controller中的处理的Action的名称最好相同,而Controller前面的XXX也必须和XXX文件夹的命名必须相同。

先从Global.aspx.cs开始吧,这就是传说中的路由Route,那么先贴上它的代码

public class MvcApplication : System.Web.HttpApplication    {        public static void RegisterRoutes(RouteCollection routes)        {            //忽略对.axd文件的Route,也就是直接去访问.axd文件,而其中的*就是匹配所有的在axd后面跟的所有参数            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");            routes.MapRoute(                "Default", // 路由名称                "{controller}/{action}/{id}", // 带有参数的 URL                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值            );        }        protected void Application_Start()//Web程序就从这里开始运行滴~        {            AreaRegistration.RegisterAllAreas();//注册所有的区域            RegisterRoutes(RouteTable.Routes);//开始路由分发        }    }



注意看routes.MapRoute这个函数,相信一看就明白,就是将Url参数分别解析为controller、action以及id,比如这样一个Url:http://127.0.0.1/Home/About/10,那么对应的controller为Home,action为About,而Iid为10。

于是,我们就可以自己写route了,比如



routes.MapRoute(         "History",         "Histroy/{year}/{moonth}/{day}",          new { controller = "Home", action = "Histroy",year= = "years",month = "month",day = "day"});



现在,我们就可以访问这样一个链接了:http://127.0.0.1/History/2011/6/21,于是,路由就会将信息传递到Home这个Controller里的一个叫History的Action去处理了,而传入的"日期“就是2011年7月22日,不理解?不急,还没讲到。

需要注意的是

  • 如果是有多个route的话,特殊的route需要放到一般的route之前,否则route将可能不会起作用,因为,路由表就是一个一个去匹配查找,如果在你写的route之前有同样匹配的route,那么你的route将可能永远不会被匹配到。
  • controller以及Action的定义是必须的,否则信息将可能不会得到专门的Action处理
  • 更多精彩内容在http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx


然后,以http://127.0.0.1/的例子来继续解说,看上面的的route,当没有参数传入时,默认的controller为Home,而Action为Index,于是,信息数据传递到HomeController.cs中文件中的Index()去处理,不信?好吧,你调试一下就知道了~
下面是HomeCotroller.cs


namespace MvcApplicationTest.Controllers{    [HandleError]//错误处理,下次再讲~    public class HomeController : Controller    {        public ActionResult Index()        {            ViewData["Message"] = "欢迎使用 ASP.NET MVC!";//这就是之前介绍的那张图片中的那个字符串的由来,怎么传过去的呢?先记住ViewData            return View();//返回view,将信息交由Home文件夹下的Index.aspx去处理        }        public ActionResult About()        {            return View();        }    }}



然后,就是Home文件夹下的Index.aspx

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %><asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">    主页</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">    <h2><%: ViewData["Message"] %></h2><!--看到这里就明白了吧,ViewData就是用来传递数据的-->    <p>        若要了解有关 ASP.NET MVC 的更多信息,请访问 <a href="http://asp.net/mvc" title="ASP.NET MVC 网站">http://asp.net/mvc</a>。    </p></asp:Content>

然后,通过上面的页面处理之后,生成html返回到客户端~

原创粉丝点击