Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC:重新分配TempData_C#_Asp.net Mvc_Tempdata - Fatal编程技术网

C# ASP.NET MVC:重新分配TempData

C# ASP.NET MVC:重新分配TempData,c#,asp.net-mvc,tempdata,C#,Asp.net Mvc,Tempdata,在控制器操作中,我从TempData变量中的重定向接收变量 public ActionResult ChangePassword() { string t = (string)TempData["myVariable"]; // works ok when coming from the redirect [..] } 因为我需要为另一个调用保留该数据,所以我尝试在返回视图之前重新分配它 public ActionResult ChangePassword() { st

在控制器操作中,我从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”]为空。也许我在做一些愚蠢的事情,但是如何得到想要的结果呢?我不想使用会话变量(它将持续更长的时间,我将努力确保手动清除该变量以防止会话变量受到污染)。我可以通过表单(一个隐藏变量)重新发布它,但我更愿意只在服务器端保留该变量。

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

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

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

我认为您正在寻找
TempData.Keep()

如果myVariable不是一个重要的信息安全性,您可以将其分配到隐藏字段(更改视图)并将其发布到下一个操作请求