Controller trong Asp.Net MVC 5 – Visual Studio 2015

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.

hoc-lap-trinh-asp-net
Hình số 1 :  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.

hoc-lap-trinh-asp-net
Hình số 2 :  Lựa chọn Template Controller

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

hoc-lap-trinh-asp-net
Hình số 3 :  Nhập tên Controller

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.

hoc-lap-trinh-asp-net
Hình số 4 :  HomeController được tạo thành công

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.

hoc-lap-trinh-asp-net
Hình số 5 :  Chỉnh sửa Action Index trong HomeController

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

hoc-lap-trinh-asp-net
Hình số 6 :  Kết quả chạy chương trình 

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.

hoc-lap-trinh-asp-net
Hình số 7 :  Phương thức Action Index 

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:

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().

hoc-lap-trinh-asp-net
Hình số 8 :  Route mặc định được tạo của ứng dụng

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.

hoc-lap-trinh-asp-net

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
hoc-lap-trinh-asp-net

Hình số 9 : Mô tả thứ tự thực hiện phương thức

Khi URL này được yêu cầu, MVC Framework sẽ thực thi theo thứ tự như sau :

  1. Tìm kiếm lớp HomeController .
  2. Tìm kiếm phương thức ProductList trong lớp Home controller.
  3. Thực thi phương thức ProductList
  4. 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.

hoc-lap-trinh-asp-net
Hình số 10 : Mô tả lớp Product

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.

hoc-lap-trinh-asp-net
Hình số 11 : Nội dung Interface IProductRepository

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 :

hoc-lap-trinh-asp-net
Hình số 12 : Nội dung lớp ProductRepository

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 :

hoc-lap-trinh-asp-net
Hình số 13 : lớp ProductController

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.
hoc-lap-trinh-asp-net
Hình số 14 : Bổ sung thêm một số thuộc tính của View

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 :

hoc-lap-trinh-asp-net
Hình số 15 : Nội dung của View

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

hoc-lap-trinh-asp-net
Hình số 16 : Nội dung Route trong lớp RouteConfig

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

hoc-lap-trinh-asp-net
Hình số 17 : Kết quả chạy chương trình

Nhận xét