เป็นไปได้ไหมที่จะตั้งค่าViewBag
ก่อนที่ฉันจะเรียกการเปลี่ยนเส้นทาง
ฉันต้องการสิ่งที่ชอบ:
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
เป็นไปได้ไหมที่จะตั้งค่าViewBag
ก่อนที่ฉันจะเรียกการเปลี่ยนเส้นทาง
ฉันต้องการสิ่งที่ชอบ:
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
คำตอบ:
เมื่อคุณใช้การเปลี่ยนเส้นทางคุณจะต้องไม่ใช้ViewBag
แต่TempData
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();
}
คุณสามารถใช้ TempData ในสถานการณ์นี้ นี่คือคำอธิบายบางส่วนสำหรับ ViewBag, ViewData และ TempData
ฉันทำแบบนี้.. และมันใช้ได้ผลสำหรับฉัน ... ที่นี่ฉันกำลังเปลี่ยนรหัสผ่านและประสบความสำเร็จฉันต้องการตั้งค่าข้อความแสดงความสำเร็จเป็น viewbag เพื่อแสดงในมุมมอง ..
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);
}
สรุป
ออบเจ็กต์ ViewData และ ViewBag ช่วยให้คุณสามารถเข้าถึงชิ้นส่วนข้อมูลพิเศษเหล่านั้นที่อยู่ข้างโมเดลของคุณอย่างไรก็ตามสำหรับข้อมูลที่ซับซ้อนมากขึ้นคุณสามารถเลื่อนขึ้นไปที่ ViewModel ได้ ในทางกลับกัน TempData ได้รับการออกแบบมาโดยเฉพาะสำหรับการทำงานกับข้อมูลบนการเปลี่ยนเส้นทาง HTTP ดังนั้นอย่าลืมระมัดระวังเมื่อใช้ TempData
หรือคุณสามารถใช้ Session เพื่อเป็นทางเลือกอื่น:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
แล้วโทรหาได้ทุกเมื่อที่คุณต้องการ
UPDATE
นอกจากนี้ตามที่ @James กล่าวไว้ในความคิดเห็นของเขาการลบหรือล้างค่าของเซสชันเฉพาะนั้นจะปลอดภัยหลังจากที่คุณใช้งานเพื่อหลีกเลี่ยงข้อมูลขยะที่ไม่ต้องการหรือค่าที่ล้าสมัย