【问题标题】:Working with tempdata in mvc在 mvc 中使用临时数据
【发布时间】:2016-05-01 14:03:12
【问题描述】:

正如我所读到的,一旦你设置了一个临时数据,它将持续到下一个请求,如果你需要更多地使用它,那么我们需要使用 keep。但在这种情况下,我的临时数据在某个地方丢失了。

场景如下:

我有一个视图,对应于我的控制器中有一个操作方法,在这里我只是设置了一个临时数据,如下所示:

控制器类:

public actionresult myview()
{
   tempdata["Empid"]= sourceid;
} 

视图由如下几个renderAction组成,控制器中的所有这些actionmethods都返回一些部分视图

@html.renderAction("details","mycontroller")
@html.renderAction("details","mycontroller")
@html.renderAction("details","mycontroller")
@html.renderAction("details","mycontroller")

现在在部分视图中,假设在一个部分视图中,我有几个 ajaxified 调用,我有一个使用 ajax 的 post 方法,如下所示:

$.post("action", "controller",{}});

请忽略语法错误,因为我只是在理解 tempdata 的逻辑方面存在问题。

因此,回到上面,现在 post 方法具有使用我在视图页面加载时设置的临时数据的操作方法,即 tempdata["Empid"],因为需要此临时数据来获取员工的详细信息。

所以,它获取数据,重新生成 json 格式的数据,然后完美地显示在视图中。 直到这里一切都很好。现在,我有一个使用 ajax post 来命中控制器的部分视图,它不是同一个控制器,而是一个不同的 cs 文件。这个临时数据在这里消失了。

为什么会这样..

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5


    【解决方案1】:

    TempData 默认情况下是为短寿命而设计的。因此,您设置为 TempDataDictionary 对象的数据仅从一个请求持续到下一个请求。之后就无法使用了。

    您可以使用TempDataDictionary.Keep() 方法再次持久化下一个请求的值。

    public ActionResult Index()
    {
      TempData["Message"]="Hello";
      return View();
    }
    public ActionResult GetCustomer()
    {
      var msg = TempData["Message"] as string;
      TempData.Keep("Message");
      return View();
    }
    

    【讨论】:

    • 完全正确,先生。如果我在返回视图的操作方法中的控制器中设置了一个临时数据,但我没有使用该临时数据。相反,我的视图有一些返回部分视图的渲染操作,在这些部分视图中,我有使用 tempdata 的 ajax 调用。临时数据是否仍然存在于我的 ajax 调用中。我问你是因为它实际上不应该持续存在,但在这种情况下,tempdata 会持续存在于我所有的 ajax 请求中。每个部分视图都有 ajax 调用,我使用相同的 tempdata 而不使用 keep。这意味着渲染操作不是新请求?
    • 何不自己试试看呢?如果您认为 tempdata 太麻烦,您也可以考虑使用 session state 或 db table。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2016-05-08
    • 2012-12-25
    • 2023-03-16
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多