2011-03-25 61 views
0

我有一个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")是空的,那么代码段的其余部分应运行,并设置这些变量。

这是怎么没有在第一次页面加载时设置这些变量?

感谢提前

回答

1

任何帮助,我认为你是确定,因为你不能从你的操作方法中访问它的会话数据不存在。

如果是这种情况,请尝试覆盖OnActionExecuting,而不是在操作方法之前调用它。在操作方法之后调用OnActionExecuted

0

的文档OnActionExecuted状态:

调用操作方法后调用。

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

你想要的是,其中列明了OnActionExecuted

调用操作方法之前调用。

这会发生在您的动作代码之前,因此第一次执行动作时会先发生,然后您的动作代码会触发。

这是一个伟大的文章,解释了ASP.NET MVC的生命周期:

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

相关问题