Відповіді:
Коли ви використовуєте перенаправлення, ви не будете використовувати 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["message"] = "MyMessage";
RedirectToAction("MyAction");
а потім телефонуйте, коли вам потрібно.
ОНОВЛЕННЯ
Крім того, як те, що сказав @James у своєму коментарі, було б безпечно звести нанівець чи очистити значення конкретного сеансу після його використання, щоб уникнути небажаних непотрібних даних або застарілих значень.