【问题标题】:ASP.NET MVC: reassign TempDataASP.NET MVC:重新分配 TempData
【发布时间】:2011-11-13 16:28:49
【问题描述】:

在控制器操作中,我从 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 变量)。我可以通过表单(隐藏变量)重新发布它,但我更愿意将变量仅保留在服务器端。

【问题讨论】:

    标签: c# asp.net-mvc tempdata


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我想你在找TempData.Keep()

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多