05 入門 - 淺談 ASP.NET MVC程序的工作原理


 

目錄索引:《ASP.NET MVC 5 高級編程》學習筆記

 

本篇內容
  1. Global.asax文件
  2. RouteConfig.cs文件
  3. 視圖命名和尋址的規則


  前面創建了一個簡單的ASP.NET MVC程序,雖然整個項目直接可以部署運行,一切都是按照約定好的執行。
  但是系統里面的一些細節還是需要我們了解的,這有助於我們對整個ASP.NET MVC程序如何工作進行系統性的理解。


  當然,在這里我們只簡單介紹一下其執行過程,詳細的生命周期等后面再逐步學習。


  除了上面介紹的Controller控制器、View視圖等,我們還需要關注Global.asax、RouteConfig.cs以及視圖命名及尋址的規則。
  (當然,在這里你只需要有個大概的認識就行了,東西不是一次性學會並掌握的。)


一、Global.asax文件

  默認創建的global.asax文件代碼如下所示:

 1 public class MvcApplication : System.Web.HttpApplication
 2 {
 3     protected void Application_Start()
 4     {
 5         AreaRegistration.RegisterAllAreas();
 6         FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
 7         RouteConfig.RegisterRoutes(RouteTable.Routes);
 8         BundleConfig.RegisterBundles(BundleTable.Bundles);
 9     }
10 }

  在ASP.NET MVC程序中,Global.asax主要是系統啟動時做一些全局性的初始化操作。


  從上面的代碼可以看出,它調用App_Start文件夾中的相關類來完成的這些工作。
  例如用RouteConfig.RegisterRoutes()來完成路由的注冊,調用FilterConfig.ResiterGlobalFilters()來完成全局過濾器的注冊等。


二、RouteConfig.cs文件

  默認創建的RouteConfig.cs文件代碼如下所示:

 1 public class RouteConfig
 2 {
 3     public static void RegisterRoutes(RouteCollection routes)
 4     {
 5         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 6 
 7         routes.MapRoute(
 8             name: "Default",
 9             url: "{controller}/{action}/{id}",
10             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
11         );
12     }
13 }

  這里RegisterRoutes()方法的作用就是定義路由,即定義客戶端通過URL訪問ASP.NET MVC程序的規則。

 

  可以注意到有一段代碼“{controller}/{action}/{id}”,其實就是定義的URL規則。


  例如,使用“http://localhost:1996/Home/Index/778078163”訪問系統,系統會把Home作為控制器的名字,從而自動對應到“/Controllers”目錄中找到名為“HomeController”的控制器,然后把“Index”作為上面找到的控制器中的“Index()”操作方法,最后將“778078163”作為“Index()”方法的參數傳入,得到相應的結果。


  另外,“http://localhost:1996/Home/Index”和“http://localhost:1996/Home”都能達到同樣的效果,主要是defaults這行代碼設置的默認值在起作用。


  關於路由規則,后面我們會單獨一篇內容專門學習。


三、視圖命名和尋址的規則

  在控制器中,使用View()方法調用視圖,返回和動作方法同名的視圖,但是卻沒有顯式提供視圖的位置。
  其實這這里依賴的就是視圖的尋址規則,即會按照規則從規定的路徑去尋找這個命名的視圖。


  在ASP.NET MVC中,有一條尋址規則,就是會從Views文件夾下和控制器名同名的文件夾中尋找(如/Views/Home)。


  因此,一般創建視圖也會按照這樣的尋址規則,否則將出現找不到視圖的錯誤。
  例如在這里,我講程序默認的/Views/Home/Index.cshtml視圖刪掉,這樣,當我訪問Home/Index視圖的的時候,就會出現如圖這樣的錯誤:
  我們也能從此發現,它默認是從哪找的這個頁面從而顯示出來的。

  


  對於一般的ASP.NET MVC程序來說,就是如圖所示的一個處理過程:

  

  1. 最開始是應用程序啟動、注冊路由訪問的規則;
  2. 當請求到來時,尋找路由表,找到負責處理的控制器和操作方法,將附帶的參數等交給該方法進行處理;
  3. 方法處理完畢,根據尋址規則找到視圖,由視圖負責呈現指定的頁面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM