Trang chủ / ASP.NET Core / Phương thức Controller và View trong ASP.NET Core MVC đầu tiên part 2

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên part 2

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên phần 2. Bây giờ tiến hành duyệt đến Movies controller trong trình duyệt và sau đó di chuyển con chuột đến một dòng edit nào đó để xem URL của chúng

controller va view trong asp.net core
controller và view trong asp.net core

Các liên kết Edit, Details, và Delete được tạo ra bởi MVC Core Anchor Tag Helper trong tập tin Views/Movies/Index.cshtml

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

Tag Helpers cho phép các mã từ phía máy chủ tham gia vào việc tạo ra và xuất ra các phần tử HTML trong tập tin Razor. Trong đoạn mã trên, các AnchorTagHelper động tạo ra các giá trị thuộc tính href (liên kết) của HTML từ các phương thức hành động của controller và định tuyến id. Bạn có thể sử dụng chức năng xem mã nguồn từ trình duyệt của bạn hoặc sử dụng phím F12 để kiểm tra các đoạn mã được tạo ra. Nó sẽ hiển thị thế này:

controller va view trong asp.net core 2
Controller và view trong asp.net core 2

Giờ bạn hãy thử nhớ lại định dạng bạn đã thiết lập trong tập tin Startup.cs nhé:

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

ASP.NET Core đã dịch http://localhost:123/Movies/Edit/4 và sau đó đưa một yêu cầu đến phương thức hành động Edit của Movies controller tham số Id là 4

Tag Helpers là một trong những tính năng phổ biến nhất trong ASP.NET Core

Mở controller Movies của bạn và xem lại hai phương thức hành động Edit.

controller và view trong asp.net core
controller va view trong asp.net core 3

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

controller-va-view-trong-ung-dung-mvc-dau-tien-4

Thuộc tính [Bind] là một cách thức để bảo vệ chống lại over-posting. Bạn chỉ nên thêm thuộc tính [Bind] vào thuộc tính mà bạn muốn thay đổi mà thôi. ViewModels cung cấp một phương pháp khác để ngăn chặn việc over-posting.

Chú ý rằng hai phương thức hành động Edit này có điểm khác nhau. Phương thức hành động thứ 2 có thuộc tính [HttpPost]

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

Thuộc tính HttpPostAttribute chỉ ra rằng phương thức Edit này (phương thức Edit thứ 2) chỉ có thể được gọi cho các yêu cầu POST mà thôi. Với phương thức đầu tiên bạn có thể thêm thuộc tính [HttpGet] vào, nhưng sẽ là không cần thiết bởi vì mặc định các phương thức mà không khai báo thì thuộc tính [HttpGet] đã được mặc định cho phương thức đó

Các thuộc tính ValidateAntiForgeryTokenAttribute được sử dụng để ngăn chặn các yêu cầu không đúng được tạo ra trong tập tin View Edit (Views/Movies/Edit/cshtml). Tập tin view này tạo ra được các anti-forgery token với Tag Helper

Các mẫu Tag Helper tạo ra một token chống giả mạo mà phải phù hợp với [ValidateAntiForgeryToken] tạo ra dấu hiệu chống giả mạo trong phương thức Edit của Movies controller.

Phương thức HttpGet của Edit lấy các thông số Id, sử dụng Entity Framework với SingleOrDefaultAsync, và trả về một bộ phim được lựa chọn để hiển thị lên view Edit, Nếu một bộ phim không được tìm thấy thì lỗi NotFound (HTTP 404) sẽ được trả về.

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

Chú ý ở đầu tập tin view có một @model MvcMovie.Models.Movie điều này đã xác định view này đã sử dụng Models movie.

Mã scaffolded sử dụng một số phương thức Tag Helper để sắp xếp HTML. Các Label của Tag Helper hiển thị tên của các trường (“Title”, “ReleaseDate”, “Genre” hoặc “Price”).

 

Phần tử <input> là một phần tử nằm trong thẻ <form> có thuộc tính hành động được thiết lập để gửi đến URL /Movies/Edit/id. Các dữ liệu sẽ được gửi đến máy chủ khi nút Save được nhập vào. Dòng cuối cùng trước khi đóng thuộc tính </form> cho thấy các XSRF ẩn được tạo ra bởi Tag Helper

Xử lý các yêu cầu POST

Danh sách sau đây hiển thị [HttpPost] của phương thức hành động Edit

Phương thức Controller và View trong ASP.NET Core MVC đầu tiên

Thuộc tính [ValidateAntiForgeryToken] xác nhận các XSRF ẩn tạo ra bởi các anti-forgery token trong Tag Helper

Hệ thống model binding gửi giá trị và tạo ra một đối tượng Movie đưa tới như là tham số movie. Phương thức ModelState.IsValid xác minh các số liệu gửi theo mẫu có thể được sử dụng để sửa đổi (chỉnh sửa hoặc cập nhật) một đối tượng Movie. Nếu dữ liệu có giá trị nó sẽ được lưu. Các cập nhật (chỉnh sửa) dữ liệu phim được lưu vào cơ sở dữ liệu bằng cách gọi phương thức SaveChangesAsysnc  của database context. sau khi lưu dữ liệu, mã chuyển hướng tới phương thức hành động Index của lớp MoviesController, hiển thị các bộ sưu tập phim, bao gồm cả những thay đổi được thực hiện.

Nhưng trước khi form được gửi đến máy chủ, client sẽ tiến hành xác thực dữ liệu bằng cách kiểm tra tất cả các trường được đưa vào. Nếu có bất kỳ lỗi nào, thông báo lỗi sẽ được hiển thị và form này sẽ không được gửi. Nếu JavaScript bị vô hiệu hóa, bạn sẽ không phải xác thực từ phía client nữa nhưng sever sẽ phát hiện các giá trị được gửi có hợp lệ không, nếu không hợp lệ các giá trị của biểu mẫu sẽ được hiển thị với thông báo lỗi. Sau đó trong hướng dẫn chúng ta xem xét xác nhận Model Validation một cách chi tiết hơn. Chức năng Validation của Tag Helper trong Views/Book/Edit.cshtml sẽ hiển thị thông báo lỗi thích hợp.

controller và view trong asp.net core 4
controller va view trong asp.net core

Tất cả phương thức HttpGet trong controller theo một mô hình tương tự. Nó có được một đối tượng phim (hoặc danh sách các phim trong trường hợp Index), và đưa các đối tượng (model) đến view. Phương thức Create đưa các đối tượng rỗng vào để Create. Cần lưu ý rằng nếu bạn muốn sửa đổi dữ liệu, bạn không được sử dụng HttpGet mà phải sử dụng HttpPost vì trong phương thức HttpGet có thể khiến các rủi ro về bảo mật và một số nguyên nhân khác nữa

Series Navigation<< Phương thức Controller và View trong ASP.NET Core MVC đầu tiên part 1Thêm Search trong ứng dụng ASP.NET Core MVC đầu tiên >>

Thông tin Nguyễn An Hoàng Nguyên

Đam mê về lập trình, thích viết lách. Có hứng thú với thương mại điện tử và kinh doanh

Check Also

widget trong template này

Generic Repository Pattern là gì ? Cách sử dụng trong ASP.NET Core

Cũng đã gần 3 tháng mình mới viết bài mới. 3 tháng trước mình đã …

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *