2012年11月19日 星期一

ASP.Net MVC中的Controller


image

     上圖是MVC專案預設的Controller內容。裡面只有很簡單的兩個檔案:
  • HomeController.cs
  • AccountController.cs
     相信大家對於這兩個檔案的名稱都感到很好奇,其實,在ASP.Net MVC專案中,舉凡是Controller的檔案都以Controller這個字作為檔案的名稱結尾,其用意很簡單,就是單純的標示這個檔案是Controller,這種命名原則對於很多苦惱於訂定自己團隊程式碼命名原則的人來說簡直是一大福音,因為你不用再費心去檢查團隊成員在檔案命名上是否有符合規範了。

     接下來我們來看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這個資料夾來看看裡面的內容,如下圖所示:

image

    
     我們可以發現到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中的內容。

沒有留言:

張貼留言