在mvc中使用tempdata

时间:2016-05-01 14:03:13

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

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

场景如下:

我有一个视图,并且对应于我在我的控制器中有一个动作方法,在这里我只设置一个tempdata如下:

控制器类:

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

视图包含几个renderAction,如下所示,控制器中的所有这些动作方法都会返回一些偏序视图

@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,即tempdata [“Empid”],因为需要这个tempdata来获取员工的详细信息。

因此,它获取数据,重新生成json格式的数据,并且我在视图中完美地显示它。 在这里一切都很好。现在,我有一个使用ajax帖子命中控制器的部分视图,它不是同一个控制器而是一个不同的cs文件。这个tempdata在这里消失了。

为什么会这样......

1 个答案:

答案 0 :(得分: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();
}