[MVC] 筆記01-03 Controller,ASP.NET MVC Routing

  • 1325
  • 0
  • MVC
  • 2010-12-15

摘要:[MVC] 筆記01-03 Controller,ASP.NET MVC Routing

Web-based MVC Frameworks

 

Web-based MVC Frameworks與一般 web frameworks的 map機制不同。一般的map機制是直接map到disk上的檔案,如webform1.aspx。

然而Web-based MVC Frameworks則是把URL map到一個class(通常叫Controller),由Controller負責處理HTTP requests,user input, 存取資料,及response(含display HTML,檔案下載, redirect to a different URL, etc.).

 

Adding a DinnersController Controller

在Controller資料夾下,選add=>Controller

 

ASP.NET MVC Routing 

ASP.NET MVC Routing 的URL format大致是/{controller}/{action}/{id}。如:/Dinners/Details/[id]。這表示當你的URL是/Dinners/時,程式會執行DinnersController中的Index method;當你的URL是/Dinners/Details/[id]/時,程式會執行DinnersController中的Details 方法。

然而,為何需要Url Routing呢,原因很多,其中之一是:方便Search Engine最佳化

接下來說說,default routing rule。這可以在 Global.asax的RegisterRoutes看到。其中controller對映的是類別的Instance,action對映的是 METHOD,ID主要是參數。

 

實作 DinnerRepository from Our DinnersController

using NerdDinner.Models;
namespace NerdDinner.Controllers {
    public class DinnersController : Controller {
        DinnerRepository dinnerRepository = new DinnerRepository();
        //
        // GET: /Dinners/
        public void Index() {
            var dinners = dinnerRepository.FindUpcomingDinners().ToList();
        }
        //
        // GET: /Dinners/Details/2
        public void Details(int id) {
            Dinner dinner = dinnerRepository.GetDinner(id);
        }
    }
}
 

 實作Views  

 首先先將上段DinnersController 中的兩個Method return型別為void改成 ActionResult 如下所示


public class DinnersController : Controller {
    DinnerRepository dinnerRepository = new DinnerRepository();
    //
    // GET: /Dinners/
    public ActionResult Index() {
        var dinners = dinnerRepository.FindUpcomingDinners().ToList();
        return View(“Index”, dinners);
    }
    //
    // GET: /Dinners/Details/2
    public ActionResult Details(int id) {
        Dinner dinner = dinnerRepository.GetDinner(id);
        if (dinner == null)
            return View(“NotFound”);
        else
            return View(“Details”, dinner);
    }
}

其中, return View(“Index”, dinners);的第1個參數指出我們要用哪一個 View template file 來產生我們的HTML。第2個參數是 View template 所用到的Model 物件。

 

實作“NotFound” View Template

 

 

 

http://www.plurk.com/SophieQ