函数调用时,Session值失效?

情况是这样的:

在ASP.NET的一个项目中,要求根据不同的地区版本设定不同的货币、日期等等的输出格式。由于各种原因,无法通过CultureInfo类实现这类自动转换。于是,最后采用的方案如下:在数据库中建立一张数据表,表中第一个字段是区域版本标号,作为主键。其余字段分别就是不同的区域版本下,货币、日期等的格式化字符串。使用时,根据程序设定的当前区域版本查询对应的各类型的格式化字符串应用到具体值的输出。查询到的每一类型的格式化字符串存放于各自的Session中。例如:有记录{0, '0:MM/dd/yyyy HH:mm:ss', 'HH:mm:ss', '0:#0.00%'},当前区域版本号为0,查询得到的'0:MM/dd/yyyy HH:mm:ss','HH:mm:ss','0:##0.00%'就存放在Session("DateTimeFormat"), Session("TimeFormat"), Session("DecimalFormat")。遇到输出值时,只需调用其ToString方法将各个Session作为参数传入格式化其输出即可。确定各Session的函数如下   

Private Sub SetRegionFormatString(ByVal connString As String)
        Dim oConnection As DBConnection = DBConnection.GetInstance(connString)
        Dim da As SqlDataAdapter
        Dim dt As DataTable
        Try
            'If oConnection Is Nothing Then oConnection = DBConnection.GetInstance(strConnString)
            da = New SqlDataAdapter("SELECT * FROM MasterStrings.dbo.RegionTypeFormat WHERE RegionId=" & Session("iParcRegionEdition"), oConnection.GetConnection)
            dt = New DataTable("RegionFormat")
            da.Fill(dt)

            If dt.Rows.Count > 0 Then
                Session("DateTimeFormat") = Convert.ToString(dt.Rows(0)("DateTimeFormat"))
                Session("DateRegularTimeFormat") = Convert.ToString(dt.Rows(0)("DateRegularTimeFormat"))
                Session("DateFormat") = Convert.ToString(dt.Rows(0)("DateFormat"))
                Session("TimeFormat") = Convert.ToString(dt.Rows(0)("TimeFormat"))
                Session("MoneyFormat") = Convert.ToString(dt.Rows(0)("MoneyFormat"))
                Session("DecimalFormat") = Convert.ToString(dt.Rows(0)("DecimalFormat"))
            Else
                Session("DateTimeFormat") = "{0:MM/dd/yyyy HH:mm:ss}"
                Session("DateRegularTimeFormat") = "{0:MM/dd/yyyy HH:mm}"
                Session("DateFormat") = "{0:MM/dd/yyyy}"
                Session("TimeFormat") = "{0:HH:mm:ss}"
                Session("MoneyFormat") = "{0:c}"
                Session("DecimalFormat") = "{0:#0.00%}"
            End If
        Catch ex As Exception
            Throw ex
        Finally
            oConnection.DestroyConnection()
        End Try
    End Sub

    Friend Sub SetCurrentRegionEdition(ByVal region As RegionEdition, ByVal connString As String)
        Session("RegionEdition") = region

        SetRegionFormatString(connString)
    End Sub

这样,使用时只需简单调用SetCurrentRegionEdition即可。这两个函数实现在一个公共的Module中,在另外一个类中使用。现在的问题是在首次使用系统的时候一切正常。当Logout,Session被清空后,再次登录系统,就会出现字符串没有被格式化。经过跟踪,发现输出结果时,格式化字符串的Session为空。而函数中对于那几个格式化字符串Session在函数中确实正确赋值了。但是只要一进入或者离开这函数调用时,原有已经被赋值的Session值会变成Nothing。导致数据输出时,格式化字符串不正确。

目前的解决方案是将这两个函数搬迁到调用其的类中,作为该类的方法而不是公共module的方法。问题得到解决。

现在的疑问:Session不应该是全局作用的么?只要没有显式置空,总是会存在的么?为什么进出函数时Session值会起变化?是因为该方法最初被实现在module中的么?如果是的话,为什么这种情况只发生在全Session被清空过一次,即Logout后,才会出现?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值