Переменная сеанса пуста после использования RedirectToAction - PullRequest
2 голосов
/ 09 мая 2019

После редактирования информации в представлении Edit.cshtml, я установил переменную сеанса Session["ToastMessage"] = "Sucessfully";, чтобы показать ее в Edit.cshtml после того, как она снова будет загружена. Но я получил Session["ToastMessage"] = null в поле зрения.

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

Попытка отладки показала Session["ToastMessage"] = null, когда она только что была передана методу Get:

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

Сессия как-то понятна, я часто использовал Session в моем приложении, и она работала нормально. ASP только очищает сессию в любое случайное время? Нужна помощь!

Ответы [ 3 ]

2 голосов
/ 09 мая 2019

В вашем случае вы можете использовать TempData вместо Session.

TempData["ToastMessage"] = "Sucessfully";

TempData может использоваться для хранения временных данных, которые можно использовать в последующем запросе.

public ActionResult Edit()
        {
            var result = TempData["ToastMessage"];
            // check result here
            AboutInformation about = LoadDataFromConfigFile();
            return View(about);
        }
0 голосов
/ 09 мая 2019

Вы можете использовать @ hien-nguyen answer, чтобы сразу вернуться к просмотру и показать сообщение с тостами. Однако в вашем случае вы перенаправляете на другой метод действия. Таким образом, вы можете использовать метод Keep данных Temp следующим образом:

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

И в методе получения:

public ActionResult Edit()
        {
            AboutInformation about = LoadDataFromConfigFile();
            var message = TempData["ToastMessage"];
            return View(about);
        }
0 голосов
/ 09 мая 2019

Вы можете использовать TempData при перенаправлении на один ActionMethod на другое действие.

var Status=TempData["ToastMessage"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...