如何防止对象变为null?

时间:2014-10-29 15:11:01

标签: asp.net vb.net webforms

我有以下代码。在页面加载期间,我从数据库中获取客户对象。之后,当我尝试以不同的方法访问同一个对象时,该对象显示为空。假设Student对象具有firstName,lastName等属性。

Public class Test

    Public oStudent as Student

    Public Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs) Handles Me.Load
        oStudent = getStudent(22) 'This is just a sample. This is not my actual database.

    End Sub

    Public Sub Update(ByVal sender as Object, ByVal e as System.EventArgs) Handles crtlStudent.Update
        Update(oStudent)'This one updates makes a database call to update the studnet

    End Sub
End class

当页面加载时,学生将正确地从数据库返回。但是,当我在我的更新方法上时,oStudent对象变为null / empty。这是页面生命周期的工作方式吗?如果是,我需要将oStudent存储在会话中或者将其缓存吗?有没有其他方法可以阻止oStudent使用会话变量或缓存它变为null?

1 个答案:

答案 0 :(得分:2)

在其他方法中,对象不是null,而是在页面被丢弃之后。这发生在每个页面的生命周期结束时,因此当它呈现为HTML并发送到客户端时。

所以你要么必须在每次回发时重新初始化/加载对象,要么在某个地方坚持它。在您的示例代码中,您始终在Page_Load加载它,因此我怀疑它是null在任何地方。所以我想这不是真正的代码:

Public Sub Page_Load(ByVal sender as Object, ByVal e as System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
      oStudent = getStudent(22) ' in a button-click handler it will be null since it's a PostBack
    End If
End Sub
  

还有其他方法可以防止oStudent变为null   其他使用会话变量或缓存它?

Nine Options for Managing Persistent User State in Your ASP.NET Application