2014-10-29 3 views
-1

У меня есть следующий код. Во время загрузки страницы я получаю объект клиента из базы данных. После этого, когда я пытаюсь получить доступ к одному и тому же объекту в другом методе, объект выходит как пустой. Объект Предположим, студент имеет такие свойства, как 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 стать другим, используя переменные сеанса или кэшировать его?

+0

Web является лицом без гражданства. Проведите некоторое исследование по этой теме, это уже обсуждалось слишком много раз для моего вкуса ... Вы можете подумать о переходе на MVC только ради понимания того, что на самом деле происходит. – walther

+0

В таких случаях я просто «обманываю» и использую скрытый элемент в форме для хранения значения, таким образом он сохраняется в представлении во время обратной передачи. Перестановки всегда теряют свои значения после завершения обратной передачи. – Zack

ответ

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 стать неопределенными других с помощью переменного сеанса или кэширования его?

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

Смежные вопросы