ViewBag ,ViewData và TempData trong MVC

1
1291
thiet web da lat gia re
thiet web da lat gia re

Chào Các bạn

Hôm nay mình giới thiệu 3 tùy chọn ViewData, ViewBag và TempData để truyền dữ liệu từ controller vào view :

ViewData và ViewBag :

  • Truyền dữ liệu từ controller sang view và ngược lại
  • Chu kỳ tồn tại ngắn

Sự khác nhau giữa ViewData và ViewBag :

  • ViewData : 1 từ điển các đối tượng (dictionary) kế thừa từ lớp ViewDataDictionary và dạng Dictionary<key,value> .Nó yêu cầu chuyển kiểu dữ liệu chính xác và nó sẽ bị lỗi khi dữ liệu null.
  • ViewBag có tính động (dynamic) và nó chỉ xuất hiện từ phiên bản 4.0

Mình lấy ví dụ nhé :

public ActionResult Index()
{
    ViewBag.Name = "Thietkewebdalat.net";
    return View();
}
public ActionResult Index()
{
    ViewData["Name"] = "Thietwebdalat.net";
    return View();
} 
Ở trong view bạn sẽ gọi lần lượt như sau :
@ViewBag.Name 
@ViewData["Name"]

Tiếp theo mình giới thiệu TempData cái này theo mình nó khá hay cho việc lưu trữ 
dữ liệu từ action này sang action khác .
Bạn xem hình để hiểu rõ cơ chế của nó nhé :

thiet web da lat gia re

Mình xin lấy ví dụ cho bạn dễ hiểu nhé :

public ActionResult Index()
    {
        TempData["name"] = "Nguyen Tan Hung";
        TempData["age"] = 30;

        return View();
    }
  public ActionResult About()
    {
        string userName;
        int userAge;
        
        if(TempData.ContainsKey("name"))
            userName = TempData["name"].ToString();// bạn sẽ lấy thông tin tên từ
action index truyền qua thông qua TempData
    
        if(TempData.ContainsKey("age"))
            userAge = int.Parse(TempData["age"].ToString());

        return View();
    }
Ở đây nó sẽ có 1 vấn đề đó là khi mình dùng TempData thì dữ liệu nó chỉ được lưu 
qua2 request có nghĩa là chỉ có thể truyền từ action 1 này sang action 2 ở action 
2 TempData nó sẽ xóa dữ liệu vì thế để có thể tiếp tục lưu dữ liệu và truyền qua 
action 3 thì tại action 2 bạn thêm vào 1 dòng lệnh :
TempData.Keep () 
Thì nó sẽ lấy được dữ liệu ở action 3

Cảm ơn các bạn đã đọc nếu có thăc mắc gì bạn cứ comment mình sẽ giải đáp nhé !