Réponses:
Lorsque vous utilisez la redirection, vous ne devez pas utiliser ViewBag
, maisTempData
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();
}
Vous pouvez utiliser TempData dans cette situation. Voici quelques explications pour ViewBag, ViewData et TempData.
J'ai fait comme ça ... et cela fonctionne pour moi ... ici, je change de mot de passe et en cas de succès, je veux définir le message de réussite pour viewbag à afficher sur la vue ..
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);
}
Résumé
Les objets ViewData et ViewBag vous permettent d'accéder à ces éléments de données supplémentaires qui accompagnent votre modèle, mais pour des données plus complexes, vous pouvez passer au ViewModel. TempData, d'autre part, est spécialement conçu pour travailler avec des données sur les redirections HTTP, alors n'oubliez pas d'être prudent lorsque vous utilisez TempData.
Ou vous pouvez utiliser Session comme alternative:
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
puis appelez-le chaque fois que vous en avez besoin.
METTRE À JOUR
De plus, comme l'a dit @James dans son commentaire, il serait prudent d'annuler ou d'effacer la valeur de cette session spécifique après l'avoir utilisée afin d'éviter des données indésirables ou une valeur obsolète.