2014-10-29 5 views
-1

다음 코드가 있습니다. 페이지로드 중에 데이터베이스에서 고객 오브젝트를 가져옵니다. 그 후 다른 메소드에서 동일한 객체에 액세스하려고하면 객체가 비어있는 상태로 나옵니다. Student 객체가 firstName, lastName 등과 같은 속성을 가지고 있다고 가정합니다.개체가 null이되지 않도록 어떻게?

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

웹 비 저장입니다. 주제에 대한 연구를 해보십시오. 내 취향에 대해 여러 번 논의했습니다. 실제로 일어나는 일을 이해하기 위해 MVC로 전환하는 것을 고려해보십시오. – walther

+0

이러한 경우 나는 단지 '속임수'로 값을 보유하기 위해 양식의 숨겨진 요소를 사용합니다. 즉, 다시 게시하는 동안 viewstate에서 유지 관리됩니다. 변수는 포스트 백이 끝나면 항상 값을 잃습니다. – Zack

답변

2

다른 방법은 객체가 페이지가 배치 된 후에 null이 아닌 경우입니다. 이는 모든 페이지의 수명주기의 끝에서 발생합니다. 따라서 HTML로 렌더링되어 클라이언트로 전송됩니다.

그래서 모든 포스트 백에서 객체를 다시 초기화하거나로드해야하거나 어딘가에 유지해야합니다. 샘플 코드에서 항상 Page_Load에로드하고 있으므로 어디서나 null 인 것으로 의심됩니다. 널 (null) 다른 사용하여 세션 변수가되고하거나 캐시에서 oStudent을 방지하기 위해 다른 방법이

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 

있습니까 : 그래서 내가 그것을 할 수있는 실제 코드가 아니라고 생각?

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

관련 문제