[MVC5 Series - P2] Controllers
Tạo 1 Controller
Controller là thành phần chứa các Action.
Controller có dạng XXXController, ví dụ như DefaultController
. Đây là quy ước đặt tên để xử lý, còn khi gọi Controller, ta chỉ cần ghi Default
.
Khám phá Action
Action là các phương thức điều khiển và đáp ứng yêu cầu của người dùng.
Thêm View cho Action
Khi thêm View cho Action, một thư mục có tên của Controller sẽ tự động thêm vào (nếu chưa có), và lấy tên của Action làm tên của View đó.
Vậy là ta đã có thành phần xử lý (Controller) và thành phần hiển thị (View). Bây giờ thử chỉnh sửa View và xem kết quả.
Nếu bây giờ bạn có chút thắc mắc thì cũng tốt thôi. Tại sao những thẻ HTML lại không nằm trong 1 trang HTML? Cú pháp @{ ... }
là gì? Và điều quan trọng là những thứ như navbar, footer ở đâu ra?
- Hãy xem phần mở rộng của file View, nó có đuôi là .cshtml, tức là trộn chung giữa mã C# và HTML. Đây là cấu trúc Razor mà bạn sẽ áp dụng để viết giao diện cho View. Tuy bạn có thể tạo project MVC sử dụng Web form nhưng "người ta" (tham khảo) khuyên là nên sử dụng cấu trúc Razor trong MVC để tối ưu hóa xử lý.
- Dĩ nhiên, @{ ... } là 1 dạng mã Razor mà các bạn sẽ được biết sau này.
- Đây là lúc cần liên tưởng tới Web form, có thể xem navbar, footer như 1 trang Master Page, View chỉ là 1 trang con được nhúng trong Master Page.
Action Result
Quay lại với Action Index trong TestController, ta thấy kết quả trả về của Action là 1 ActionResult, với kiểu này bạn có thể trả về nhiều kết quả khác nhau tùy thuộc vào mục đích sử dụng của bạn.
- View() trả về View được bọc trong layout (Master Page)
- PartialView() giống như View, nhưng sẽ không được bọc trong layout, ví dụ nếu như trong Action Index return PartialView(), ta sẽ không nhìn thấy footer hoặc navbar nữa, chỉ có View Index thôi.
- Content() trả về text.
- Json() trả về dữ liệu Json.
- Javascript() trả về nội dung javascript
- File() trả về nội dung file không bao gồm layout.
- RedirectToAction() chuyển sang 1 Action khác.
- Redirect() chuyển sang một url khác.
Vậy hãy thử một kiểu trả về khác trong Action
Vấn đề ở đây là làm sao để chạy Action Hello khi mà nó không có giao diện (nó trả về chỉ là text). Vì Content() thường được dùng để test dữ liệu, cho nên cách chạy ở đây sẽ là...nhập url cho nó. Bạn hãy chạy Action Index, sau đó chuyển url sang Action Hello bằng cách sau.
Định tuyến
Định tuyến (routing) là việc cấu hình đưa ra định dạng mẫu của url, url gọi các Action nằm trong Controller.
Như trên, url có dạng {controller}/{action}/{id}, và ý nghĩa sẽ là (ví dụ với Test/Hello):
- Nếu không có {id} sẽ là
http://localhost:30383/Test/Hello
, và sẽ chạy Action Hello của controller Test - Nếu không có {action} sẽ là
http://localhost:30383/Test
, và nó sẽ chạy Action Index của controller Test(mặc định) - Nếu không có {controller} sẽ là
http://localhost:30383
, và bạn đoán xem nó sẽ chạy Action nào? Nó sẽ chạy cái url Default tức làhttp://localhost:30383
=http://localhost:30383/Home
=http://localhost:30383/Home/Index
Ví dụ chạy Action About của controller Home
Kết
Bài này mình xin dừng lại ở đây. Bài tiếp theo sẽ là cách tiếp nhận tham số trong Action.
Bài viết rất hay đủ cho người đọc có thể hiểu và mở rộng thông tin tiềm kiếm từ các nguồn khác. Rất thích hợp cho người mới bắt đầu.
ReplyDeleteThanks
Jonh
Cảm ơn bác, em mới học mà đọc thấy dễ hiểu lắm.
ReplyDelete