会话变量未在初始页面加载时保存

时间:2011-03-25 14:48:03

标签: asp.net-mvc vb.net session session-variables

我有一个MVC应用程序,它根据内部静态IP地址设置一些会话变量。

我已经构建了一个ApplicationController来覆盖MVC中的OnActionExecuted子,以获取我需要在整个应用程序中使用的数据。

但是,下面的代码,只是我的代码片段,但是我的帖子编辑,只是部分工作。在初始页面加载时,会话变量不会保存,但在页面刷新后它们会保存。我遇到的问题是这些需要保存在初始页面加载上。

If Session("Item1") = Nothing Then
                If IpAddressShort <> "" Then
                    Dim locInfo = cmsRepository.GetInfoBasedOnLocation(IpAddressShort).SingleOrDefault()

                    If locInfo IsNot Nothing Then
                        Session("Item1") = locInfo.Item1
                        Session("Item2") = locInfo.Item2
                        Session("Item3") = locInfo.Item3
                        Session("Item4") = locInfo.Item4

                        If locInfo.Item2= "1" Then
                            Session("Visibility") = 3
                            Session("TypeShort") = "XXXX"
                        ElseIf locInfo.Item2= "2" Then
                            Session("Visibility") = 4
                            Session("TypeShort") = "YYYY"
                        ElseIf locInfo.Item2= "9" Then
                            Session("Visibility") = 2
                            Session("TypeShort") = "ZZZZZ"
                        End If

                    End If
                End If
            End If

理论上,如果我没有问题,如果没有Session("Item1")设置/如果Session("Item1")为空,那么该片段的其余部分应该运行并设置这些变量。

为什么这不是在第一次加载页面时设置这些变量?

感谢您提前提供任何帮助

2 个答案:

答案 0 :(得分:1)

我假设您确定会话数据不存在,因为您无法在操作方法中访问它。

如果是这种情况,那么请尝试覆盖OnActionExecuting,因为在操作方法之前调用它。在动作方法之后调用OnActionExecuted

答案 1 :(得分:0)

OnActionExecuted州的文档:

  

在调用action方法后调用。

在您的初始调用中,数据不存在,因为操作尚未完成执行。 OnActionExecuted尚未运行,因为它会在您的操作完成后运行。第二次它在那里因为OnActionExecuted从最后一个动作开始运行。

你想要的是OnActionExecuted,其中指出:

  

在调用action方法之前调用。

这将在您的操作代码之前发生,因此第一次执行此操作时,所有操作都将首先发生,然后您的操作代码将会触发。

这是一篇很好的文章,解释了ASP.NET MVC的生命周期:

http://blog.stevensanderson.com/2007/11/20/aspnet-mvc-pipeline-lifecycle/