使用 RedirectToAction 后会话变量为空
Posted
技术标签:
【中文标题】使用 RedirectToAction 后会话变量为空【英文标题】:Session Variable is null after using RedirectToAction 【发布时间】:2019-09-26 21:07:46 【问题描述】:在视图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");
尝试调试,刚刚传递给Get方法时显示Session["ToastMessage"] = null
:
// GET: About/Edit/
public ActionResult Edit()
会话以某种方式清晰,在我的应用程序中使用了很多会话,并且效果很好。 ASP 会在任何随机时间清除会话吗? 需要帮助!
【问题讨论】:
您可以使用 TempData,如下面的答案所示。此外,您还可以使用它的 Keep 或 Peek 方法使其在其他操作方法中也可用。但我认为您不需要它,因为它是 Toast 消息。 我认为 TempData 和 Session 都适用于这种情况。我已经尝试过 TempData,但它得到的 null 与我使用 Session 时相同。想知道是什么使值变为空。 @Sid 你需要使用keep,因为这里是从一种方法到另一种操作方法。所以为此它会像: TempData.Keep("ToastMessage");返回之前在您的编辑方法中。然后在您的 Get 方法中再次阅读。 【参考方案1】:对于您的情况,您可以使用TempData
而不是Session
。
TempData["ToastMessage"] = "Sucessfully";
TempData 可用于存储临时数据,可用于后续请求。
public ActionResult Edit()
var result = TempData["ToastMessage"];
// check result here
AboutInformation about = LoadDataFromConfigFile();
return View(about);
【讨论】:
我认为 TempData 和 Session 都适用于这种情况。我已经尝试过 TempData,但它得到的 null 与我使用 Session 时相同。想知道是什么让值变为空。【参考方案2】:您可以在将一个 ActionMethod 重定向到另一个 Action 时使用 TempData。
var Status=TempData["ToastMessage"];
【讨论】:
【参考方案3】:您可以使用@hien-nguyen answer 直接返回查看并显示 toast 消息。但是,在您的情况下,您正在重定向到另一个操作方法。 因此,您可以像这样使用临时数据的 Keep 方法:
// 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");
在Get方法中:
public ActionResult Edit()
AboutInformation about = LoadDataFromConfigFile();
var message = TempData["ToastMessage"];
return View(about);
【讨论】:
刚试了TempData.Keep,在Get方法中还是得到null。【参考方案4】:检查您的 localhost 浏览器 cookie 或您正在使用的任何服务器;他们不应该被阻止。允许 cookie。
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review以上是关于使用 RedirectToAction 后会话变量为空的主要内容,如果未能解决你的问题,请参考以下文章
RedirectToAction 和 RedirectToRoute
MVC RedirectToAction 在 global.asax 中调用 Session_Start()
MVC - 使用 RedirectToAction() 传递数据