[MVC5 Series - P4] Chia sẻ dữ liệu
Chia sẻ dữ liệu Là cách một đối tượng dữ liệu ở thành phần này được sử dụng ở thành phần khác tại cùng thời điểm hoặc khác thời điểm. Trong mô hình MVC, dữ liệu được chia sẻ theo các cách sau:
- Từ Controller sang View: ViewBag, ViewData, Model
- Phiên làm việc: Session
- Toàn ứng dụng web: Application
- Trên 1 client: Cookie
1. ViewBag, ViewData
Đây là cách đơn giản nhất để truyền dữ liệu từ Controller sang View.
Hiểu đơn giản, ViewBag là một kiểu dữ liệu động, bạn có thể bỏ bất cứ thứ gì vào đó, với bất cứ kiểu dữ liệu gì.
Cách dùng
Ví dụ
ViewData hoàn toàn tương tự với ViewBag, chỉ khác ở cách viết
2. Model
Model là một object bất kỳ. Model được truyền từ Controller sang View thông qua lệnh return View(model);
Ví dụ
Theo như trên, để truy xuất thông tin được truyền từ Controller ta sử dụng @Model, đây chính là đối tượng được truyền từ Controller thông qua lệnh return View(model);
Chú ý
khi viết @Model.
sẽ không có chế độ IntelliSense bởi vì View chỉ biết tiếp nhận Model từ Controller chứ không biết Model đó thuộc kiểu gì. Do đó ta phải gõ chính xác thuộc tính của Model. Để sử dụng được chức năng IntelliSense, ta chỉ định cho View biết Model có kiểu là gì bằng câu lệnh sau
Và một chú ý quan trọng nữa, đó là khi chỉ định kiểu cho Model thì ta dùng cú pháp
@model
(m nhỏ), còn khi sử dụng ta dùng @Model
(M hoa).
Model với tập hợp
Đối với một tập hợp, cách sử dụng hoàn toàn tương tự. Tuy nhiên cách chỉ định model và cách sử dụng có đôi chút khác. Khi đó trong View, @Model được xem như 1 tập hợp, do đó ta phải dùng 1 vòng lặp để lấy dữ liệu từ model.
3. Session
Session là một vùng nhớ mà server cấp phát cho user để lưu dữ liệu riêng của mình. Vùng nhớ này sẽ được giải phóng khi hết phiên làm việc (Refresh trang, đóng trình duyệt...)
Tùy thuộc vào nơi sử dụng Session sẽ có 1 cách viết khác nhau
Một số thao tác cơ bản với Session
Add(Key, Value)
Session.Add("Name","PhanTienQuang");
[Key] = Value
Session["Name"] = "TienQuang";
Remove(Key)
Session.Remove("Name")
Clear()
Session.Clear()
Abandon()
Session.Abandon()
SessionID
var id = Session.SessionId;
Ví dụ demo: Khi nhấn Submit, những thông tin nhập vào sẽ được lưu vào Session và chuyển qua trang hiển thị. Trong trang Profile, nếu Logout thì xóa Session.
Bước 1 thêm 1 Controller và Model
Tiếp, thêm giao diện đăng ký
Tiếp theo, khi nhấn nút Submit, dữ liệu trong form sẽ được chuyển đến Action Register trong Controller Student với Method là Post. Ta thêm Action Register cho StudentController như sau:
Action Register chuyển đến Action Profile
Trong Action Profile kiểm tra xem đã có Session Student chưa, nếu chưa có thì nó sẽ quay lại trang đăng ký. Do đó, nếu ban đầu chưa có gì mà ta nhập url localhost.../Student/Profile thì vẫn sẽ ở trang đăng ký mà thôi.
Cuối cùng là xử lý khi nhấn vào Logout. Logout sẽ chuyển đến Action Logout và xóa Session["Student"] đồng thời quay lại trang đăng ký.
Hy vọng qua ví dụ nhỏ này, bạn sẽ nắm được cách thức sử dụng Session. Đây là một kỹ thuật quan trọng và thường dùng trong web thương mại như duy trì giỏ hàng, các mặt hàng đã xem...
4. Application
Application là nơi sử dụng để duy trì dữ liệu được chia sẻ trên toàn ứng dụng. Bất cứ ai cũng có thể thực hiện các thao tác truy xuất, thay đổi, xóa dữ liệu trên Application.
Cách thức lấy đối tượng Application cũng tương tự so với Session, tùy thuộc vào code được viết ở đâu thì có 1 cách lấy khác nhau
HttpContext.Application
HttpContext.Application["Hello"] = "Hello World";
@AppState
@AppState["Hello"]
HttpContext.Current.Application
HttpContext.Current.Application["Hello"] = "Hello World";
Các thao tác với Application
Add(Key, Value)
HttpContext.Application.Add("Visitor", 0);
[Key] = Value
HttpContext.Application["Visitor"] = 0;
Remove(Key)
HttpContext.Application.Remove("Visitor");
Clear()
HttpContext.Application.Clear()
Lock()
HttpContext.Application.Lock()
UnLock()
HttpContext.Application.UnLock();
Như bảng trên, các thao tác trên Application hoàn toàn tương tự với Session, chỉ thêm 2 phương thức Lock()
và UnLock()
. Bởi vì Application được chia sẻ cho nhiều user cùng lúc, do đó có thể xảy ra hiện tượng xung đột dữ liệu, vì thế mà 2 phương thức này được bổ xung để xử lý vấn đề xung đột đó.
Ứng dụng của Application
Một trong những ứng dụng đơn giản nhưng hiệu quả nhất của Application chính là đếm số lần khách truy cập trang web.
5. Cookie
Cookie là những mẫu tin nhỏ được lưu trữ trên máy tính của client. Cookie được truyền thông với Server thông qua Request và Response.
Hạn chế của Cookie là chỉ lưu trữ dữ liệu text và kích thước tối đa là 4KB. Và việc lưu trữ Cookie còn tùy thuộc vào người dùng có cho phép lưu trữ hay không.
Thao tác với Cookie bao gồm nhận + xử lý Cookie từ client và Tạo + gửi Cookie về Server.
Nhận Cookie từ client
Request.Cookies
Request.Cookies["id"];
@Request.Cookies
@Request.Cookies["id"]
HttpContext.Current.Request.Cookies
HttpContext.Current.Request.Cookies["id"];
Tạo mới Cookie
Các thuộc tính và phương thức của Cookie
Value
myCookie.Value = "ABCD123";
Name
myCookie.Name = "ids";
Expires
myCookie.Expires = DateTime.Now.AddDays(1);
Values.Add(Key, Value)
myCookie.Values.Add("id2", "DEF345");
Values[Key] = Value
myCookie.Values["id"] = "ABCDEF";
myCookie.Expires = DateTime.Now.AddDays(-1);
ád
ReplyDeletebài viet rat hay, mong anh tiep tuc chuoi bài ve MVC này
ReplyDeleterất dễ hiểu, cảm ơn nhé.
ReplyDeletebài viết rất hay, cách trình bày dễ hiểu, mong bạn tiếp tục các bài viết tiếp về mvc này, thanks
ReplyDeleteThis comment has been removed by the author.
ReplyDeletelike!
ReplyDeletebài viết hay
ReplyDeletemenconMpor_ra Kenji Yniguez https://marketplace.visualstudio.com/items?itemName=quesulpenba.The-Cavern-gratuita-2021
ReplyDeleteoltpagenen
ibarQta_be Joe Bonsness programs
ReplyDeleteclick
icdedere