用户特定的自定义变量

时间:2012-10-16 21:21:52

标签: asp.net vb.net

我试图绕过这个,但我不能。

假设我有一个名为custom的类。我有一个名为User_ID的变量,我用它来检索用户的会话(所以我不必一遍又一遍地调用会话变量)。像这样:

Public Class custom

Public Shared User_ID as integer

Public Shared sub GatherUserID()

   User_ID = Session ("user_ID")

end sub

end class

是的,这是一个非常简单的例子,但它得到了我的观点。我在经典ASP(使用包含,而不是类)中做了类似的事情,而User_ID对于当时访问相关页面的人来说是唯一的。

出于某种原因,这是我不明白的,当我在自定义类中使用custom.User_ID时,它是为所有人共享的。这就是我不想要的。我想要的是能够使用这样的变量并保持用户特定的变量。我看到跨类共享变量的优势(例如数据库连接字符串),但我没有看到如何在自定义类中设置自定义变量,我只能为该用户使用而不必经常调用Sessions。

我看到我可以将它声明为Property而不是共享变量,但我真的不知道究竟要完成什么,似乎没有人有明确的解释。属性用户/会话特定?它会解决我的具体问题吗?这是我没有得到的。

编辑:为了澄清一下,本例中的user_ID是我打算在创建页面时调用的几个点中使用的东西(例如主文件,页面本身,各种类。)因此创建自定义变量的原因。

感谢。

2 个答案:

答案 0 :(得分:1)

共享意味着它与应用领域中的所有人共享。当您调用方法并设置共享变量时,使用共享变量的所有内容都将返回相同的值。

您可以做的是封装对Session对象的访问权限。使用模块或我的首选方法,使用Extension方法和我挂起Session的共享自定义类。这允许我看到它来自Session,但是像Session.vars.UserID一样访问它,UserID是vars类的属性。

Module SessionExt

    Public Class SessionVars
        Private this as HttpSessionState
        Public New (ths as HttpSessionState)
            this = ths
        End New
        Public Property Example as Integer
            Get
               Static nm as String = MethodBase.GetCurrentMethod().Name.Substring(4)
               return CType(this(nm), Integer)
            End Get
            Set (value as Integer)
               Static nm as String = MethodBase.GetCurrentMethod().Name.Substring(4)
               this(nm) = value
            End Set
        End Property 
    End Class
    <Extension()>
    Public Function vars(ByVal this as HttpSessionState) as SessionVars
        return New SessionVars(this)
    End Function
End Module

然后你去了,所有的会话变量都包含在一个很好的类中。添加新属性是简单的锅炉板代码,您只需更改名称并设置类型即可。您可以将其重构为更好的名称,查看它的使用位置,使用它来包含更复杂的结构(数据表,其他类或结构等)。

注意:如果您使用的是global.asax,则代码运行时可能尚未建立会话,请注意您从那里调用的任何属性都不使用会话状态,或者检查首先是null。

答案 1 :(得分:0)

Public Class custom

Public User_ID as integer

Public sub GatherUserID()

   User_ID = Session ("user_ID")

end Sub

end Class

然后,对于每个启动会话的新用户:


Dim userSpecificCustom as New Custom()
userSpecificCustom.GatherUserID()

我是C#家伙,所以如果语法不是100%正确,请不要打倒我。

还建议将User_ID设为属性而不是公共字段。 (参见例如http://www.vbdotnetheaven.com/uploadfile/manish1231/fields-and-properties-in-vb-net/http://blogs.msdn.com/b/vbteam/archive/2009/09/04/properties-vs-fields-why-does-it-matter-jonathan-aneja.aspx