[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.

Action Index return View (giao diện), do đó ta thêm View cho Action này.

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?

Bạn chỉ cần biết một số điều sau, những thứ còn lại bạn sẽ được hiểu sau này:
  1. 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ý.
  2. Dĩ nhiên, @{ ... } là 1 dạng mã Razor mà các bạn sẽ được biết sau này.
  3. Đâ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.

  1. View() trả về View được bọc trong layout (Master Page)
  2. 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.
  3. Content() trả về text.
  4. Json() trả về dữ liệu Json.
  5. Javascript() trả về nội dung javascript
  6. File() trả về nội dung file không bao gồm layout.
  7. RedirectToAction() chuyển sang 1 Action khác.
  8. 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):

  1. Nếu không có {id} sẽ là http://localhost:30383/Test/Hello, và sẽ chạy Action Hello của controller Test
  2. 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)
  3. 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.

Comments

  1. 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.
    Thanks
    Jonh

    ReplyDelete
  2. Cảm ơn bác, em mới học mà đọc thấy dễ hiểu lắm.

    ReplyDelete

Post a Comment

Popular posts from this blog

Gỡ bộ Visual Studio ra khỏi máy tính

Căn giữa thẻ div trong thẻ div