2

在控制器操作中,我从 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();
}

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

4

3 回答 3

4

我想你正在寻找TempData.Keep()

于 2011-09-09T10:33:06.530 回答
0

TempData 仅在当前请求的上下文中持续存在。如果您将内容返回给客户端,然后客户端回发,则您不能使用它。您的选项非常标准,基本上仅如您所描述的那样:

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

就我个人而言,我会选择会话提供者,或者尽量避免将内容返回给客户端并立即回发,如果可能的话......

于 2011-09-09T10:32:34.167 回答
0

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

于 2011-09-09T10:41:31.177 回答