138 votes

Définir Viewbag avant la redirection

Est-il possible de définir le ViewBag avant que j'appelle une redirection ?

Je veux quelque chose comme :

@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");

271voto

Raphaël Althaus Points 38619

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();
}

15voto

laszlokiss88 Points 1929

Vous pouvez utiliser la TempData dans cette situation. Ici Voici quelques explications sur le ViewBag, le ViewData et le TempData.

13voto

RAVI VAGHELA Points 741

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);
    }

3voto

Paul Zahra Points 3034

Tiré d'ici

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.

-3voto

nathan742 Points 620

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.com

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.

Powered by:

X