【问题标题】:TempData value not persisting if used in view如果在视图中使用,TempData 值不会持续存在
【发布时间】:2013-08-28 11:53:43
【问题描述】:

我正在使用

TempData["hdn"] = "1";

在控制器中

如果我用这个

 @{
      var hdn = (string)TempData["hdn"];
  }

在视图中,TempData["hdn"] 在 POST 中获取 null 值。如果我在视图中跳过此代码,它会在 POST 中持续存在。为什么会这样?

【问题讨论】:

标签: asp.net-mvc-4 tempdata


【解决方案1】:

TempData 值在读取后被清除。

如果您希望在视图中读取该值后将其返回到控制器中,则需要将其包含在隐藏字段中,然后从表单值中读出。

类似:

<input type="hidden" name="hdn" value="@hdn" />

然后在你的控制器中,你可以这样做:

var hdn = Request.Form["hdn"]

HTH

【讨论】:

【解决方案2】:

TempData 类似于 ViewData 但有区别。它可以包含两个连续请求之间的数据,之后它们被销毁。

如果你想保持TempData的价值使用

TempData.Keep()

例子:

var hdn= TempData["hdn"]; //it is marked for deletion
TempData.Keep("hdn"); //unmarked it

MSDN Docs for Keep

【讨论】:

    【解决方案3】:

    TempData 键值集在被调用后将被删除。 Satpal 谈到了 Keep,但如果您想明确说明每次想要检索它而不删除它,您也可以使用 Peek。

    TempData.Peek(String)
    

    例子:

    var hdnNotDeleted = TempData.Peek["hdn"];
    

    MSDN Documentation for Peek

    【讨论】:

      【解决方案4】:

      如果您的控制器操作返回ViewResult,并且您很想将数据放入TempData, 不要那样做。在这种情况下,请改用ViewData/ViewBagTempData 是一个非常短暂的实例,您应该只在当前和后续请求期间使用它。由于TempData 以这种方式工作,您需要确定下一个请求将是什么,而Redirecting 到另一个View 是您唯一可以保证这一点的时间。因此,使用TempData 可靠工作的唯一情况是在重定向时。所以请记住。

      有史以来最好的解释:http://sampathloku.blogspot.com/2012/09/how-to-use-aspnet-mvc-tempdata-properly.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-25
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2013-03-02
        • 2016-08-06
        • 1970-01-01
        相关资源
        最近更新 更多