asp.net-mvc - 在设置 TempData ["myvalue"] = "foo"之前调用 MVC 3 Session.Abandon() 导致下一个 Controller 将 TempData 设置为 null

标签 asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我有一个 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.RemoveSession.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/

相关文章:

c# - ActionFilterAttribute 范围调用顺序

asp.net - 在 IIS7 的 ASP.NET MVC 3 中找不到图像

jquery - 如何使用 Telerik ComboBox 的选定值过滤 MVC Telerik Grid?

c# - 在 ASP.NET MVC 中动态生成许多路由...这是一个完全糟糕的主意吗?

c# - 在动态创建的 Html.AutoCompleteFor 中使用 typeahead-mvc-model

javascript - jquery Ajax 调用 - 数据参数未传递给 MVC Controller 操作

asp.net-mvc-3 - 部署在Azure上的MVC应用程序无法连接到SQL Azure数据库,但可以通过SSMS连接

asp.net-mvc - 为什么 ASP.NET MVC 会忽略我的斜杠?

asp.net-mvc - MVC : 404 route not working properly in production

asp.net - bundle 优先于路由吗?