ASP.NET MVC 具體實現細節

上篇介紹了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返回到客戶端~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章