Jawaban:
Saat Anda menggunakan pengalihan, Anda tidak boleh menggunakan ViewBag, tapiTempData
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();
}
Anda dapat menggunakan TempData dalam situasi ini. Berikut beberapa penjelasan untuk ViewBag, ViewData dan TempData.
Saya memang suka ini..dan berhasil untuk saya ... di sini saya mengubah kata sandi dan jika berhasil saya ingin menyetel pesan sukses ke viewbag untuk ditampilkan pada tampilan ..
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);
}
Ringkasan
Objek ViewData dan ViewBag memberi Anda cara untuk mengakses bagian data tambahan yang menyertai model Anda, namun untuk data yang lebih kompleks, Anda dapat naik ke ViewModel. TempData, di sisi lain, dirancang khusus untuk bekerja dengan data pada pengalihan HTTP, jadi ingatlah untuk berhati-hati saat menggunakan TempData.
Atau Anda dapat menggunakan Sesi sebagai alternatif:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
lalu panggil kapan pun Anda membutuhkannya.
MEMPERBARUI
Selain itu, seperti yang dikatakan @James dalam komentarnya, akan aman untuk membatalkan atau menghapus nilai sesi tertentu setelah Anda menggunakannya untuk menghindari data sampah yang tidak diinginkan atau nilai yang sudah ketinggalan zaman.