摘要:[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