Risposte:
Quando usi il reindirizzamento, non devi usare ViewBag
, maTempData
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();
}
È possibile utilizzare TempData in questa situazione. Ecco alcune spiegazioni per ViewBag, ViewData e TempData.
Mi è piaciuto .. e sta funzionando per me ... qui sto cambiando la password e in caso di successo voglio impostare il messaggio di successo nella viewbag da mostrare in 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);
}
Sommario
Gli oggetti ViewData e ViewBag offrono modi per accedere a quei pezzi di dati aggiuntivi che vanno a fianco del tuo modello, tuttavia per dati più complessi, puoi passare al ViewModel. TempData, d'altra parte, è progettato specificamente per lavorare con i dati sui reindirizzamenti HTTP, quindi ricorda di essere cauto quando usi TempData.
Oppure puoi usare Session come alternativa:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
e poi chiamalo quando ne hai bisogno.
AGGIORNARE
Inoltre, come ha detto @James nel suo commento, sarebbe sicuro annullare o cancellare il valore di quella specifica sessione dopo averla utilizzata per evitare dati indesiderati o valori obsoleti.