【发布时间】:2011-09-23 22:36:02
【问题描述】:
我有一个控制器将逻辑查找:会话值
//checks value null etc.. for existing record in session memory.
Session["certnum"]
然后在控制器中我决定有一个条件:
//is called to initiate a New Record that will be created.
Session.Abandon();
然而在程序编码中是 Session.Abandon();在创建 TempData["myobject"] = "foo" 之前出现,并且在单步执行代码时,即时窗口中的 TempData 显示了我的价值,一切看起来都很好。然后重定向到另一个控制器:
return RedirectToAction("ChildInfo", "NewRecord");
此 ChildInfo 方法不再具有 TempData 值...现在它为空。在设置 TempData 值之前调用了会话放弃方法,不确定这是否是 MVC 会话的错误,但这对我来说是零意义。如果我正在创建一个新的轻量级会话 TempData,那么它应该持续到下一个控制器。如果我删除 Session.Abandon() 方法,那么 TempData 值会像以前一样继续工作。
【问题讨论】:
-
这里重要的是 TempData 依赖于 session。会话消失了,因此 TempData 消失了。
-
@Adam 是的,我意识到,尽管我在创建 TempData 值之前调用 Session.Abandon() ,但我在控制器的相同 actionresult 方法中,但是,这对我来说似乎很疯狂.
-
为什么会发疯?您正在重置临时数据所需的对象。这就像说“我删除了表中的所有行,但我不明白为什么在下一个请求中我要请求的行不存在?” :)
-
如果我认为我正在破坏使用会话的全部功能,那是有道理的。但是,对于您的类比,如果我明确删除了数据表中的所有行,那么显然我无法从数据表中读取这些行,但是如果我认为我实际上是在将一行添加回数据表中(类比)我正在创建一个新的会话对象(Tempdata),它只是简单地封装在方法中,甚至不允许这个新的会话持续存在。嘿,我不同意为什么 .net 这是它的工作方式,这完全是为了选择我的战斗。感谢您的反馈。
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing