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é :
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é !