我有一个 Controller 将逻辑寻找: session 值
//checks value null etc.. for existing record in session memory.
Session["certnum"]
然后在 Controller 中我决定有一个条件:
//is called to initiate a New Record that will be created.
Session.Abandon();
但是在程序编码中是Session.Abandon();在创建 TempData["myobject"] = "foo"之前出现,并且在单步执行代码后,立即窗口中的 TempData 显示了我的值,一切看起来都很好。然后重定向到另一个 Controller 时:
return RedirectToAction("ChildInfo", "NewRecord");
此 ChildInfo 方法不再具有 TempData 值...现在它为 null。在设置 TempData 值之前调用了 session 放弃方法,不确定这是否是 MVC session 的错误,但这对我来说毫无意义。如果我正在创建一个新的轻量级 session TempData,那么它应该保留到下一个 Controller 。如果我删除 Session.Abandon() 方法,则 TempData 值将继续像以前一样工作。
最佳答案
Session.Abandon()
方法在请求结束时清除当前 session ,这就是它的设计目的。
参见http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx
如果您想重定向到不同的操作,您确实需要像您所做的那样调用重定向。如果您使用Abandon()
,请求将获得一个新的 session ID。
如果您想从 session 中删除某些内容,则需要使用 Session.Remove
或 Session.RemoveAll
方法(此外,Clear
也可以用于执行与 RemoveAll
相同的操作。这将通过以下方式完成:
Session.Remove(itemToRemove);
或
Session.RemoveAll()
通过使用这两个选项中的任何一个,您可以从 session 中删除部分或全部以前存储的数据,而不会真正导致在下一个请求时重新生成 session ID。
关于asp.net-mvc - 在设置 TempData ["myvalue"] = "foo"之前调用 MVC 3 Session.Abandon() 导致下一个 Controller 将 TempData 设置为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535511/