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

  1. Từ Controller sang View: ViewBag, ViewData, Model
  2. Phiên làm việc: Session
  3. Toàn ứng dụng web: Application
  4. 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.

The ViewBag object is a wrapper around the ViewData object that allows you to create dynamic properties for the ViewBag. Both the ViewData and ViewBag objects are great for accessing extra data (i.e., outside the data model), between the controller and 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

Trong Controller
ViewBag.XXX
Trong View
@ViewBag.XXX

Ví dụ

ViewData hoàn toàn tương tự với ViewBag, chỉ khác ở cách viết

Trong Controller
ViewData["Hello"] = "Hello World";
Trong View
@ViewData["Hello"] @ViewData.Hello

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

Trong Controller
Session["Demo"] = "This is demo";
Trong View
@Session["Demo"]
Trong 1 class bất kỳ khác
HttpContext.Current.Session["Demo"] = "This is demo";

Một số thao tác cơ bản với Session

Add(Key, Value)
Thêm mới 1 đối tượng vào Session
Session.Add("Name","PhanTienQuang");
[Key] = Value
Thêm mới (nếu chưa có) hoặc thay thế (nếu đã có) một đối tượng trong Session (thường dùng)
Session["Name"] = "TienQuang";
Remove(Key)
Xóa đối tượng ra khỏi Session
Session.Remove("Name")
Clear()
Xóa tất cả các đối tượng khỏi Session
Session.Clear()
Abandon()
Hủy Session
Session.Abandon()
SessionID
Lấy id của Session hiện tại
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

Controller
HttpContext.Application
HttpContext.Application["Hello"] = "Hello World";
View
@AppState
@AppState["Hello"]
Class bất kỳ
HttpContext.Current.Application
HttpContext.Current.Application["Hello"] = "Hello World";

Các thao tác với Application

Add(Key, Value)
Thêm mới 1 đối tượng vào Application
HttpContext.Application.Add("Visitor", 0);
[Key] = Value
Thêm mới hoặc thay thế 1 đối tượng
HttpContext.Application["Visitor"] = 0;
Remove(Key)
Xóa đối tượng
HttpContext.Application.Remove("Visitor");
Clear()
Xóa sạch các đối tượng trong Application
HttpContext.Application.Clear()
Lock()
Khóa Application, các yêu cầu của user khác phải đợi unlock
HttpContext.Application.Lock()
UnLock()
Mở khóa Application
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()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

Controller
Request.Cookies
Request.Cookies["id"];
View
@Request.Cookies
@Request.Cookies["id"]
Model
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
Giá trị của Cookie
myCookie.Value = "ABCD123";
Name
Tên của Cookie
myCookie.Name = "ids";
Expires
Thời hạn tồn tại của Cookie
myCookie.Expires = DateTime.Now.AddDays(1);
Values.Add(Key, Value)
Thêm 1 giá trị
myCookie.Values.Add("id2", "DEF345");
Values[Key] = Value
Thêm mới hoặc thay thế 1 giá trị
myCookie.Values["id"] = "ABCDEF";
Chú ý: để xóa 1 cookie
myCookie.Expires = DateTime.Now.AddDays(-1);

Comments

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