Respuestas:
Cuando use la redirección, no deberá usar ViewBag, peroTempData
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();
}
Puede usar TempData en esta situación. Aquí hay alguna explicación para ViewBag, ViewData y TempData.
Me gustó esto ... y está funcionando para mí ... aquí estoy cambiando la contraseña y en caso de éxito Quiero configurar el mensaje de éxito en viewbag para que se muestre a la vista ...
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);
}
Resumen
Los objetos ViewData y ViewBag le brindan formas de acceder a esos datos adicionales que van junto con su modelo, sin embargo, para obtener datos más complejos, puede subir al ViewModel. TempData, por otro lado, está diseñado específicamente para trabajar con datos en redirecciones HTTP, así que recuerde tener cuidado al usar TempData.
O puede usar Session como alternativa:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
y luego llámalo cuando lo necesites.
ACTUALIZAR
Además, como dijo @James en su comentario, sería seguro anular o borrar el valor de esa sesión específica después de usarla para evitar datos basura no deseados o valores obsoletos.