2
votes

La variable de session est nulle après l'utilisation de RedirectToAction

Après avoir modifié les informations dans la vue Edit.cshtml , j'ai défini une variable de session Session ["ToastMessage"] = "Successfully"; pour l'afficher dans Edit .cshtml après cela est à nouveau chargé. Mais j'ai eu Session ["ToastMessage"] = null dans View.

  // GET: About/Edit/
            public ActionResult Edit()
            {
            }

Tentative de débogage, elle a montré Session ["ToastMessage"] = null quand il est juste passé à la méthode Get:

        // GET: About/Edit/
        public ActionResult Edit()
        {
            AboutInformation about = LoadDataFromConfigFile();
            return View(about);
        }

        // POST: About/Edit/
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "NameApp,ContactInformation,Email,Fax,Phone,ReleaseDay,LogoPathOfProduction,IsShow,LatestVersion,ReleaseNotes")] AboutInformation about,List<string> imagesToDelete, List<HttpPostedFileBase> images, bool? isShowInfo)
        {
            if (ModelState.IsValid)
            {
                //update....
            }

            Session["ToastMessage"] = "Sucessfully";
            return RedirectToAction("Edit");
        }

La session est claire d'une manière ou d'une autre, j'ai beaucoup utilisé Session dans mon application, et cela a bien fonctionné. ASP efface-t-il simplement la session à un moment aléatoire? Besoin d'aide!


3 commentaires

Vous pouvez utiliser TempData, comme suggéré dans les réponses ci-dessous. De plus, vous pouvez utiliser sa méthode Keep ou Peek pour la rendre disponible dans d'autres méthodes d'action également. mais je ne pense pas que vous en aurez besoin car c'est un message Toast.


Je pense que TempData et Session fonctionnent bien dans ce cas. J'ai déjà essayé TempData mais il a obtenu la même valeur nulle lorsque j'ai utilisé Session. Je me demande ce qui rend la valeur nulle. @Sid


Vous devez utiliser keep, car ici, cela passe d'une méthode à une autre méthode d'action. Donc, pour cela, ce sera comme: TempData.Keep ("ToastMessage"); dans votre méthode d'édition avant de revenir. Et puis relisez-le dans votre méthode Get.


3 Réponses :


2
votes

Avec votre coque, vous pouvez utiliser TempData au lieu de Session .

public ActionResult Edit()
        {
            var result = TempData["ToastMessage"];
            // check result here
            AboutInformation about = LoadDataFromConfigFile();
            return View(about);
        }

TempData peut être utilisé pour stocker des données temporaires qui peuvent être utilisées dans la requête suivante.

TempData["ToastMessage"] = "Sucessfully";


1 commentaires

Je pense que TempData et Session fonctionnent bien dans ce cas. J'ai déjà essayé TempData mais il a obtenu la même valeur nulle lorsque j'ai utilisé Session. Je me demande ce qui rend la valeur nulle.



0
votes

Vous pouvez utiliser TempData lors de la redirection vers une méthode d'action vers une autre action.

var Status=TempData["ToastMessage"];


0 commentaires

0
votes

Vous pouvez utiliser @ hien-nguyen answer pour revenir directement à la vue et à l'affichage du message toast. Cependant, dans votre cas, vous redirigez vers une autre méthode d'action. Ainsi, vous pouvez utiliser la méthode Keep des données temporaires comme ceci:

public ActionResult Edit()
        {
            AboutInformation about = LoadDataFromConfigFile();
            var message = TempData["ToastMessage"];
            return View(about);
        }

Et dans la méthode Get:

// POST: About/Edit/
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "NameApp,ContactInformation,Email,Fax,Phone,ReleaseDay,LogoPathOfProduction,IsShow,LatestVersion,ReleaseNotes")] AboutInformation about,List<string> imagesToDelete, List<HttpPostedFileBase> images, bool? isShowInfo)
    {
        if (ModelState.IsValid)
        {
            //update....
        }

        TempData["ToastMessage"] = "Sucessfully";
        var message = TempData["ToastMessage"];
        TempData.Keep("ToastMessage");
        return RedirectToAction("Edit");
    }


1 commentaires

vient d'essayer TempData.Keep et obtient toujours null dans la méthode Get.