Bài 02: Models, Views và Controllers
Bài 02: Models, Views và Controllers
Models, Views và Controller.
Trong bài này bạn sẽ có một cài nhìn tổng quát về models, views, controller của ASP.NET MVC framework. Bạn sẽ hiểu sự khác nhau giưa ASP.NET MVC với các Framework khác như ASP.NET Webform hoặc ASP.
URL Routing.
Một request từ browser sẽ được map tới một controller, đặc tính này của ASP.NET MVC gọi là URL Routing.
Routing sử dụng một “bảng route” để “bắt” các request được gọi đến. Cái bảng này được khởi tạo ngay khi web app chạy lần đầu. Bản này được cài đặt trong file Global.asax. Mặc định của file này là:
Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace TaskList
{
// Note: For instructions on enabling IIS6 or IIS7 classic mode,
// visit http://go.microsoft.com/?LinkId=9394801
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Với khởi tạo như trên thì khi bắt đầu một web app thì bảng route này sẽ chứa một route. Mà tất cả các request đều được “break” thành 3 phần. Phần đầu tiên map tới một controller name, phần thứ hai map tới một action name và phần cuối cùng map tới parameter pass tới action với tên là Id.
Eg: /Product/Details/3
Controller = ProductController
Action = Details
Id = 3
Chú ý là phần controller phia sau của nó “suffix” băt buộc phải là “Product” + “Controller”
Eg: /Product
Controller = ProductController
Action = Index
Id = “”
Eg: http://localhost
Controller = HomeController
Action = Index
Id = “”
Controllers
Một controller sẽ quyết định trả về cái gì cho browser, khi mà user thực hiện 1 request đối với server.
Một controller đơn giản chỉ là một class (VB.NET or C#.NET)
Chúng ta cùng xem qua file HomeController.cs (file này là mặc định khi bạn tạo một project MVC)
public class HomeController : Controller
{
private NorthwindDataContext db = new NorthwindDataContext();
public ActionResult Index()
{
var listTask = db.TaskTables.OrderByDescending(q => q.EntryDate);
return View(listTask.ToList());
}
public ActionResult About()
{
ViewData["Title"] = "About Page";
return View();
}
}
Ở đây minh chỉ trich đoạn trong file HomeController.cs, ta thây có 2 method Index() và About()
URL : /Home/Index sẽ gọi method Index(); /Home/About sẽ gọi method About()
Views
Nhìn vào HomeController trên ta thấy 2 method đều return lại một view – view chứa các HTML markup. Một view tương ứng một page trong ASP.NET MVC Framework.
Bạn phảiđặt hai file này vào đúng vị trí
HomeController.Index() return view với url : \Views\Home\Index.aspx
HomeController.About() return view với url : \Views\Home\About.aspx
Models
Đây là nơi chưa tất cả các business logic và data access của ứng dụng. Bạn không nên đặt qua nhiều code vào trong controller, controller chỉ có một vài dòng code mà thôi.
Comments
Em đang gặp một khó khăn nhỏ. Cụ thể như sau:
Trên trang index, em muốn thể hiện nhiều view thì làm thế nào? Tại vì em thấy mặc định nó chỉ có 1 view thôi.