2009年9月5日 星期六

MVC (3): Controller

接收使用者的 Request ,經由 Url routing 後,第一關來到的是 Controller。
Controller 的責任可參考 MVC (1): Asp.NET MVC 概念說明

Controller 的責任是:處理資料 (Model) 並挑選一個 View 回應給 Client。由 Routing ,到 Controller 處理Model,最後到 View,一氣喝成。一個關節沒弄好,就會出錯。

舉例來說,預設的 routing table 如下:

routes.MapRoute( 
"Default",                                              // Route name 
"{controller}/{action}/{id}",                           // URL with parameters 
new { controller = "Home", action = "Index", id = "" }  // Parameter defaults 
); 
http://localhost/Home 則會找到 HomeController 的 Index Action。請參考下例
[HandleError]
    public class HomeController : Controller
    {
        //http://localhost:4041/Home/
        public ActionResult Index()
        {
            return View();
        }

        //http://localhost:4041/About/
        public ActionResult About()
        {
            return View();
        }

        //http://localhost:4041/About/3
        public ActionResult About(int id)
        {
            ViewData["id"] = id;
            return View();
        }
    }
如果執行 http://localhost:4041/Home的要求,但 HomeController 沒有 Index() 這個 Action的話,會出現什麼狀況呢?答案是 The resource cannot be found.

controller要如何「挑選」View 呢?答案是 View() 這個 Method
當我們使用 return View() 時,會使用同 Action 的 View。

舉例來說,
[HandleError]
    public class HomeController : Controller
    {
        //http://localhost:4041/Home/
        public ActionResult Index()
        {
            return View();
		//與 return View("Index") 相同
        }
    }
如果,硬要挑選其他名稱的 View,就要指定 View 的名稱。如下例

[HandleError]
    public class HomeController : Controller
    {
        //http://localhost:4041/Home/
        public ActionResult Index()
        {
            return View("List"); //雖然是 HomeController下的 Index Action,但指名挑選名為 List 的 View
        }
    }

沒有留言:

Share with Facebook