正如我所读到的,一旦你设置了一个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在这里消失了。
为什么会这样......
答案 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();
}