Câu trả lời:
Khi bạn sử dụng chuyển hướng, bạn sẽ không sử dụng ViewBag
, nhưngTempData
public ActionResult Action1 () {
TempData["shortMessage"] = "MyMessage";
return RedirectToAction("Action2");
}
public ActionResult Action2 () {
//now I can populate my ViewBag (if I want to) with the TempData["shortMessage"] content
ViewBag.Message = TempData["shortMessage"].ToString();
return View();
}
Bạn có thể sử dụng TempData trong tình huống này. Dưới đây là một số giải thích cho ViewBag, ViewData và TempData.
Tôi đã làm như thế này..và nó đang hoạt động cho tôi ... ở đây tôi đang thay đổi mật khẩu và khi thành công, tôi muốn đặt thông báo thành công cho viewbag để hiển thị trên màn hình ..
public ActionResult ChangePass()
{
ChangePassword CP = new ChangePassword();
if (TempData["status"] != null)
{
ViewBag.Status = "Success";
TempData.Remove("status");
}
return View(CP);
}
[HttpPost]
public ActionResult ChangePass(ChangePassword obj)
{
if (ModelState.IsValid)
{
int pid = Session.GetDataFromSession<int>("ssnPersonnelID");
PersonnelMaster PM = db.PersonnelMasters.SingleOrDefault(x => x.PersonnelID == pid);
PM.Password = obj.NewPassword;
PM.Mdate = DateTime.Now;
db.SaveChanges();
TempData["status"] = "Success";
return RedirectToAction("ChangePass");
}
return View(obj);
}
Tóm lược
Các đối tượng ViewData và ViewBag cung cấp cho bạn các cách để truy cập những phần dữ liệu bổ sung đi cùng với mô hình của bạn, tuy nhiên đối với những dữ liệu phức tạp hơn, bạn có thể chuyển lên ViewModel. Mặt khác, TempData được thiết kế đặc biệt để làm việc với dữ liệu trên các chuyển hướng HTTP, vì vậy hãy nhớ thận trọng khi sử dụng TempData.
Hoặc bạn có thể sử dụng Session để thay thế:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
và sau đó gọi nó bất cứ khi nào bạn cần.
CẬP NHẬT
Ngoài ra, như những gì @James đã nói trong nhận xét của mình, sẽ an toàn nếu bạn vô hiệu hóa hoặc xóa giá trị của phiên cụ thể đó sau khi bạn sử dụng nó để tránh dữ liệu rác không mong muốn hoặc giá trị lỗi thời.