1. Giới thiệu Contrller
Controller là một trong các thành phần chính của chương trình được viết trên nền tảng công nghệ Asp.Net MVC. Controller trong kiến trúc MVC xử lý bất kỳ các yêu cầu nào từ URL. Hình vẽ dưới đây mô tả vai trò của Controller trong kiến trúc MVC.

Controller là một class, nó thừa kế từ lớp cơ sở System.Web.Mvc.Controller, Lớp Controller chứachứa một hay nhiều phương thức có phạm vi truy cập là public, các phương này này được gọi là các Action. Controller và các phương thức Action tiếp nhận các yêu cầu từ phía trình duyệt, truy vấn các thông tin cần thiết từ Model sau đó trả lại kết quả cho trình duyệt. Dữ liệu hiển thị sẽ được trình duyệt hiển thị, thông tin hiển thị sẽ được trình bày bởi View trong kiến trúc MVC.
Trong Asp.Net MVC tất cả các class controller đều có hậu tố là từ “Controller”, ví dụ controller cho trang chủ có tên là “HomeController”, controller cho sản phẩm (Product) có tên là ProductController, ngoài ra tất cả các controller bắt buộc phải nằm trong thư mục Controller trong ứng dụng Asp.Net MVC.
2. Thêm mới Controller.
Bước 1 : Tạo ứng dụng asp.net mvc, sau đó chọn template ứng dụng Asp.Net MVC là Empty.
Bước 2 : Trong thư mục Project của ứng dụng, Click phải vào thư mục Controller, -> Chọn Add-> Click vào Controller.
Bước 3 : Khi của số Add Scaffold hiện ra chọn các mẫu Template phù hợp, ở đây chúng ta chọn MVC 5 Controller – Empty.

Bước 4 : Cập nhật tên Controller trong cửa sổ hiển thị sau .

Bước 5 : Kết thúc quá trình tạo, khi đó lớp HomeController sẽ tạo thành công trong thưc mục Controller của ứng dụng, hình ảnh mô tả lớp HomeController.

Trong hình trên, lớp HomeController được thừa kế từ lớp Controller, tất cả các lớp Controller trong Asp.net MVC đều được thừa kế từ lớp trừu tượng Controller, đây chính là lớp cơ sở của Controller.
Để không phải tạo View, chúng ta chỉnh sửa phương thức Index, thay vì trả về ActionResult thì thì phương thức này trả về string.

Thực hiện chạy chương trình. Kết quả sẽ hiển thị như sau:

3. Phương thức Action
3.1 Tổng quát về phương thức Action
Tất cả các phương thức public trong class Control đều gọi là phương thức Action. Các phương thức Action giống như các phương thức khác trong class tuy nhiên nó có các rằng buộc sau :
- Các phương thức Action bắt buộc phải thiết lập phạm vi truy cập public. Không được thiết lập phạm vi truy cập là private và protected.
- Các phương thức Action không được overloaded.
- Các phương thức Action không được thiết lập static.
Ví dụ minh họa phương thức Index trong HomeController.

Trong hình số 7, Phương thức Action Index() có :
- Phạm vi truy cập là public
- Giá trị trả về là ActionResult sử dụng phương thức View().
- Phương thức View được định nghĩa trong lớp cơ sở Controller.
Cú pháp thông dụng của phương thức trong lớp Controller :
Cú pháp:
1 2 3 4 5 |
public ActionResult <ActionMethod_Name>() { /*Code to execute logic and return the result as ActionResult*/ } |
Mô tả:
- <ActionMethod_Name>: Tên của phương thức
3.2. Phương thức mặc định
Tất cả các controller đều có phương thức action mặc định đó là phương thức Index. Khi tạo ứng dụng bộ điều hướng sẽ mặc định được tạo cùng với HomeController và phương thức Action Index().

3.3. ActionResult
Trong ứng dụng Asp.Net MVC, các phương thức Action thường trả lại kết quả, kết quả này được gọi là kết quả của action. ActionResult là một lớp cơ sở cho tất cả các lớp lưu trữ kiểu dữ liệu trả về của các phương thức action thực thi. Ví dụ như ViewResult là lớp được thừa kế từ lớp ActionResult, khi phương thức Action trả về dữ liệu có kiểu ViewResult, có nghĩa dữ liệu trả về của phương thức Action này sẽ được Render ra HTML tại tầng View.
Bảng dưới dây mô tả các kết quả trả về của phương thức Action có thể thực thi.

3.4. Gọi phương thức Action
Trong Asp.Net MVC, một controller có thể có nhiều phương thức Action. Chúng ta có thể gọi phương thức Action thông qua địa chỉ URL trên trình duyệt thông qua tên controller và tên phương thức.
Cú pháp :
- http:// <domain_name> /<controller_name>/<actionmethod_name>
Mô tả :
- <domain_name>, Tên domain của ứng dụng
- <controller_name>, Tên controller của ứng dụng, chú ý tên controller không chứa hậu tố Controller.
- <actionmethod_name>, Tên phương thức Action của ứng dụng
Ví dụ : Khi gọi phương thức ProductList trong HomeController của ứng dụng với tên domain mvclab2.com thì chúng ta sẽ nhập địa chỉ URL sau vào trình duyệt web.
http:// mvclab2.com/Home/ ProductList
Khi URL này được yêu cầu, MVC Framework sẽ thực thi theo thứ tự như sau :
- Tìm kiếm lớp HomeController .
- Tìm kiếm phương thức ProductList trong lớp Home controller.
- Thực thi phương thức ProductList
- Trả về kết quả cho trình duyệt.
4. Ví dụ minh họa
Viết ứng dụng Asp.Net MVC, hiển thị danh sách sản phẩm, thông tin bản phẩm bao gồm:
- Mã sản phẩm – ProductID, kiểu nguyên
- Tên sản phẩm – ProductName, kiểu chuỗi.
- Giá sản phẩm – Price, kiểu số thực
- Mô tả sản phẩm – Description, kiểu chuỗi
Trong quá trình tạo ví dụ minh họa, tôi sử dụng một phần của Parttern Repository để thực hiện. Cụ thể thế nào là thiết kế mẫu phát triển Repository thì tôi sẽ đề cập chi tiết ở một bài viết riêng biệt về thiết kế mẫu phát triển này.
Chúng ta thực hiện ví dụ qua các bước sau :
Bước 1 : Tạo ứng dụng Asp.Net, sau đó chọn Template ứng dụng là Empty Project.
Bước 2 : Tạo lớp Product trong thư mục Model, lớp Product chứa cac thông tin thuộc tính của lớp sản phẩm, thông tin này bao gồm : Mã sản phẩm, tên sản phẩm, giá sản phẩm và mô tả sản phẩm.

Bước 3 : Tạo thư mục Abstract trong ứng dụng, sau đó bổ sung Interface (IproductRepository) có chứa phương thức GetAllProduct(), phương thức này trả về danh sách thông tin sản phẩm.

Bước 4 : Tạo lớp ProductRepository, mục tiêu của lớp này nhằm thực thi Interface IproductRepository. Để tạo lớp này, đầu tiên chúng ta tạo thư mục Concrete trong ứng dụng, sau đó tạo lớp ProductRepository với nội dung như sau :

Bước 5: Tạo controller Product, bao gồm các Data member và phương thức Action như sau :
- Khai báo biến ProductList thể hiện của Interface IProductRepository
- Phương thức Action là AllProductList có kiểu trả về là ViewResult, chứa nội dung danh sách sản phẩm.
Nội dung cụ thể của Controller Product như sau :

Bước 6 : Tạo View tương ứng với phương thức AllProductList bằng cách sau :
- Click phải vào phương thức AllProductList trong ProductController, sau đó chọn Add View
- Chọn Template của View là List, Model class là Product và Layout page.

Khi đó View sẽ được tạo trong thư mục View, chú ý tên View là AllProductList mặc định sẽ trùng với tên của phương thức.
Nội dung View như sau :

Bước 7 : Bổ sung Route trong lớp RouteConfig trong thư mục App_Start của ứng dụng

Bước 8 : Kết quả chạy chương trình như sau :
