Controller trong Asp.Net MVC 5 – Visual Studio 2015 – Phần 2

1. Tham số của phương thức Action
Giống như tham số của phương thức trong các ngôn ngữ lập trình thông dụng như C#, Java, C++, Tham số được sử dụng để đóng vai trò làm đầu vào cho một phương thức Action, mỗi tham số sẽ được xác định thông qua tên và kiểu dữ liệu của tham số đó.
Tham số được khai báo bên trong dấu () sau tên của phương thức Action, mỗi phương thức Action không giới hạn số lượng các tham số truyền vào, mỗi tham số được phân cách bởi dấu phảy.
Cú pháp:

Mô tả :

  • <access_modifier> : Phạm vi truy cập luôn là public
  • <return_type> : Kiểu giá trị trả về của phương thức Action, thông thường lập trình viên thường sở dụng ActionResult làm giá trị trả về do 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, giá trị tường minh của phương thức Action các bạn tham khảo tại mục 3.3 của bài số 2 phần 1.
  • <MethodName> : Tên phương thức.
  • [list of parameters]: Danh sách các tham số truyền vào, chú ý các tham số truyền vào không được sử dụng ref và out.

Ví dụ :

hoc-lap-trinh-asp-net-mvc
Hình số 1 : Tham số phương thức Action

Mặc định giá trị của các tham số trong phương thức Action được truy vấn bởi tập hợp dữ liệu của request, tập hợp giá trị này được xác định theo cặp tên/giá trị (name/value) gắn với dữ liệu của form hoặc giá trị chuỗi URL hoặc giá trị của cookies. Trong hình số 1 Phương thức chỉnh sửa dữ liệu ActionResult Edit(Student std), phương thức này gắn liền với form chỉnh sửa dữ liệu Student. Phương thức xóa dữ liệu ActionResult Delete(int id),  phương thức này gắn với giá trị id trong chuỗi URL.
2. Action Selectors
Action Selector là các Attribute gắn với các phương thức Action. Action Selector trợ giúp cho các Route Engine lựa chọn chính xác các phương thức Action khi đáp ứng yêu của của các Http Request. Asp.Net MVC 5 bao gồm các Action Selectors sau :

  • ActionName
  • NonAction
  • ActionVerb

2.1 ActionName
Attribute ActionName cho phép sử dụng tên khác nhau của phương thức. Khi lập trình, chúng ta không muốn đưa ra tên phương thức thực thi thực sự của Controller ra phía Client.
Ví dụ :

 hoc-lap-trinh-asp-net-mvc
Hình số 2 : Ví dụ Attribute ActionName

Trong ví dụ trên, Chúng ta sử dụng Attribute ActioName(“find”) cho phương thức GetById.Có nghĩa, Tên phương thức “find” sẽ thay thế “GetById”. Phương thức này khi gọi từ Http Request sẽ có địa chỉ URL như sau http://localhost/student/find/1 thay vì địa chỉ URL http://localhost/student/getbyid/1.
2.2 NonAction
Mục tiêu của Attribute này nhằm chỉ rõ phương thức trong controller không đóng vai trò là phương thức Action. Sử dụng Attribute NonAction khi lập trình viên muốn phương thức public trong Controller không thực hiện vai trò của một action.
Ví dụ trong Controller Student, sử dụng phương thức Student GetStudent(int id) với mục tiêu hỗ trợ các phương thức Action khác, nó không có vai trò của một phương thức Action, khi đó ta viết như sau :

hoc-lap-trinh-asp-net-mvc
Hình số 3 : Ví dụ Attribute NonAction

2.3 ActionVerb
Một phương thức action khi được định nghĩa có thể được gọi theo cả Get và Post. Cách này cho phép lập trình viên có thể định nghĩa hai phương thức khác nhau nhưng cùng tên, một phương thức đáp ứng Http Get và phương thức kia thì đáp ứng Http Post.
MVC Framework hỗ trợ nhiều ActionVerb, như HttpGet, HttpPost, HttpPut, HttpDelete, HttpOptions & HttpPatch. Tùy theo tình huống, lập trình viên có thể sử dụng các ActionVerb khác nhau. Mặc định nếu không sử dụng ActionVerb nào, thì MVC Framework sẽ tự hiểu đó hà HttpGet.
Ví dụ minh họa sử dụng HttpGet và HttpPost khi thực hiện nghiệp vụ chỉnh sửa dữ liệu Student.

hoc-lap-trinh-asp-net-mvc
Hình số 4 : Ví dụ Attribute ActionVerb

Chú ý: Trong một phương thức Action có thể áp dụng nhiều ActionVerb, Ví dụ phương thức dưới đây áp dụng cả Http Get và Http Post.

3. Action Fillter
Trong Asp.net MVC, Các phương thức Action trong Controller thường có quan hệ 1-1 với tương tác của người dùng ví dụ như khi người sử dụng Click một liên kết hoặc submit một form chứa dữ liệu.
Đôi khi chúng ta muốn thực hiện một nghiệp vụ logic trước hoặc sau phương thức được gọi, khi đó chúng ta sử dụng Action Fillter.
Action Fillter có thể áp dụng cho một phương thức Action hoặc toàn bộ Controller. Khi áp dụng Action Fillter cho toàn bộ Controller, thì Action Fillter có hiệu lực cho toàn bộ các phương thức Action trực thuộc Controller đó.
Asp.Net MVC cung cấp 4 loại Action Fillter :

  • Authorization filters : Khi thực thi bảo mật hệ thống, lập trình viên cần quyết định phương thức nào sẽ được thực thi gắn với mỗi vai trò và người dùng, để thực hiện điều này lập trình viên sử dụng Authorization filters.
  • Action filters : Thực thi attribute IActionFilter.
  • Result filters : Bổ sung thêm điều kiện xử lý cho kết quả trả về của Http Result. Ví dụ sử dụng class OutputCachAttribute gắn với phương thức Action khi thực thi.
  • Exception filters – Thực thi attribute IExceptionFilter.

Ví dụ :  Sử dụng Authorization filters để thực hiện cấp quyền thực thi với các phương thức trong Controller Home.

hoc-lap-trinh-asp-net-mvc
Hình số 5 : Mô tả Authorization filte

Trong hình số 5 phương thức AdministratorsOnly() chỉ được truy vấn với những người sử dụng có vai trò là “Admin” và “Super User”.
4. Ví dụ minh họa
Phát triển tiếp ví dụ trong bài số 2 phần 1, bổ sung thêm các chức năng như, tìm kiếm và xem thông tin chi tiết về sản phẩ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
Chúng ta thực hiện các bước như sau:
Bước 1 : Bổ sung 2 phương thức FindProductByName và GetProductByID vào trong Interface IProductRepository.

hoc-lap-trinh-asp-net-mvc
Hình số 6 : Các phương thức trong IProductRepository

Bước 2 : Bổ sung thêm phương thức trong lớp ProductRepository trong thư mục Concrete, mục tiêu của lớp này nhằm thực thi Interface IproductRepository.

hoc-lap-trinh-asp-net-mvc
Hình số 7 : Các phương thức trong lớp ProductRepository

Bước 3 : Bổ sung thêm các phương thức Action trong Controller Product. Các phương thức này được gọi khi thực hiện các nghiệp vụ như :

  • Xem chi tiết thông tin sản phẩm
  • Tìm kiếm thông tin sản phẩm
hoc-lap-trinh-asp-net-mvc
Hình số 8 : Các phương thức Action trong lớp ProductControl

Bước 4 : Tạo View tương ứng với phương thức SearchProduct bằng cách sau :

  • Click phải vào phương thức SearchProduct 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-mvc
Hình số 9 : Tạo View tương ứng với Phương thức SearchProduct

Bước 5 : Chỉnh sửa View (Product/SearchProduct.cshtml) nhằm bổ sung thông tin về form Search Product vào trong file  SearchProduct.cshtml.

hoc-lap-trinh-asp-net-mvc
Hình số 10 : Chỉnh sửa View, bổ sung thêm form Search Product và Link Detail

Khi chạy chương trình sẽ ra giao diện như sau :

hoc-lap-trinh-asp-net-mvc
Hình số 11 : Kết quả chạy chương trình tương ứng với Phương thức Search

Tuy nhiên khi chúng ta thực hiện Click Link Details Product thì chương trình hiển thị lỗi do chúng ta chưa tạo View tương ứng gắn với phương thức Action này.
Bước 6 : Tạo View tương ứng với phương thức và phương thức DetailProduct:

  • Click phải vào phương thức sử dụng DetailProduct trong ProductController, sau đó chọn Add View
  • Chọn Template của View là Detail, Model class là Product và Layout page.
hoc-lap-trinh-asp-net-mvc
Hình số 12 : Tạo View với phương thức DetailProduct

Sau đó xóa link “Edit” và chỉnh sửa “Back to List” thành “Back to Product List” và trỏ đến phương thức “SearchProduct
Tiến hành chạy thử và test chương trình.

hoc-lap-trinh-asp-net-mvc
Hình số 13 : Tìm kiếm thông tin sản phẩm

Nhận xét