
上圖是MVC專案預設的Controller內容。裡面只有很簡單的兩個檔案:
- HomeController.cs
- AccountController.cs
接下來我們來看HomeController裡面的程式碼吧。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MvcApplication1.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "修改此範本即可開始著手進行您的 ASP.NET MVC 應用程式。"; return View(); } public ActionResult About() { ViewBag.Message = "您的應用程式描述頁面。"; return View(); } public ActionResult Contact() { ViewBag.Message = "您的連絡頁面。"; return View(); } } }
舉凡所有的Controller都會自動繼承Controller這個父類別,而我們自己所撰寫的Controller其內部的Method都被叫作Action。關於Action這個名詞大家目前只要記得就好,如果真的記不太住也可以把它看作一般Method就好,畢竟一口氣記太多名詞還是很讓人頭痛。
Home這個Controller其內部共有三個Action;其中Index這個Action是預設的程式進入點。至於為什麼是程式的進入點,容我日後再予以詳述。每個Action其最終都會回傳一個型別為ActionResult的物件,而就我們從Home這個Controller看到的所有Action來說,每個Action都是Return View()。如果大家還沒忘記之前我在MVC那篇文章所提到的,Controller最後會將最後一棒交給View!而Action最後一行的程式碼我們可以把它看成是Controller已將最後一棒交出去給View了。
讓人納悶的是,Action的Return View()是Return那一個View呢?因為看看上面的Home這個Controller,每一個Action都是回傳相同的View()!
其實,在ASP.Net MVC中Controller與View有很深的關係,我們可以打開Views這個資料夾來看看裡面的內容,如下圖所示:

我們可以發現到Views中有三個主要資料夾:
Account
Home
Share
展開Home這個資料夾後可以發現一個驚人的事實,其實Home這個Controller中有幾個Action在View中就有相對應的幾個View,而且View的名稱和Action的名稱一模一樣。由此可以推敲,Controller中的每一個Action其Return的View()就是相對於這個Action的View!
舉個例來說,當Index這個Action回傳View()時,其最後一棒就是交給Views資料夾下Home這個資料夾中的Index.cshtml。
總結: ASP.Net MVC中的Controller與View的關係在本篇文章中已有約略的雛型,對於首次開發ASP.Net MVC的朋友來說,心中對於Controller與View之間的關係有了初步的認識,下一篇將來介紹View中的內容。
沒有留言:
張貼留言