ASP.. NET MVC:重新分配TempData

本文关键字:分配 TempData 新分配 NET MVC ASP | 更新日期: 2023-09-27 18:08:10

在控制器动作中,我从TempData变量的重定向中接收一个变量

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"]; // works ok when coming from the redirect
    [..]
}

由于我需要为另一个调用持久化该数据,所以我尝试在返回视图之前重新分配它。

public ActionResult ChangePassword()
{
    string t = (string)TempData["myVariable"];
    [..]
    TempData["myVariable"] = TempData["myVariable"];
    return View();
}

我立即从呈现的页面向ChangePassword提交POST请求,但这次TempData["myVariable"]为空。也许我做了一些愚蠢的事情,但如何得到想要的结果?我不想使用Session变量(它将持续更长的时间,我将致力于手动确保清除变量以防止Session变量的污染)。我可以通过表单(一个隐藏的变量)重新发布它,但我更喜欢保持变量仅在服务器端。

ASP.. NET MVC:重新分配TempData

我想你是在找TempData.Keep()

TempData只保存在当前请求的上下文中。如果您正在向客户端返回内容,然后客户端正在发回,则不能使用它。你的选择是非常标准的,基本上只有你所描述的:

  • 使用表单变量(如您所述-我猜如果它是一个更改密码字段,那么它可能是敏感的)
  • 使用会话变量(如您所述!)
  • 在应用程序的其他地方持久化变量-自定义数据库字段或用户配置文件或类似的

就我个人而言,我会使用会话提供者,或者尽量避免将内容返回给客户端,如果可能的话…

如果myVariable不是关键信息安全,您可以将其访问到隐藏字段(更改视图)并将其发布到下一个操作请求