我有以下代码。在页面加载期间,我从数据库中获取客户对象。之后,当我尝试以不同的方法访问同一个对象时,该对象显示为空。假设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?
答案 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