Est-il possible de définir le ViewBag
avant que j'appelle une redirection ?
Je veux quelque chose comme :
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
Est-il possible de définir le ViewBag
avant que j'appelle une redirection ?
Je veux quelque chose comme :
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");
Lorsque vous utilisez la redirection, vous ne devez pas utiliser ViewBag
mais 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();
}
Vous pouvez utiliser la TempData dans cette situation. Ici Voici quelques explications sur le ViewBag, le ViewData et le TempData.
J'ai fait comme ça... et ça marche pour moi... ici je change le mot de passe et sur le succès je veux mettre le message de succès à viewbag pour 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, quant à lui, est conçu spécifiquement pour travailler avec des données sur les redirections HTTP, alors n'oubliez pas d'être prudent lorsque vous utilisez TempData.
Ou bien vous pouvez utiliser Session comme alternative :
Session["message"] = "MyMessage";
RedirectToAction("MyAction");
et l'appeler à chaque fois que vous en avez besoin.
UPDATE
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 les données inutiles ou les valeurs périmées.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.