Есть ли способ запретить веб-приложению ASP.Net очищать переменные страницы на стороне VB? - PullRequest
3 голосов
/ 17 июня 2010

У меня есть веб-приложение в ASP.Net с VB-кодом.Мне нужна переменная List, которую я объявил, чтобы она сохранялась до тех пор, пока человек находится на странице, но в настоящее время каждый раз, когда элемент управления возвращает код, все очищается.Я совершенно новичок в ASP.net, поэтому я понятия не имею, возможно ли это вообще.Можно ли это сделать с помощью переменной Session?Мне кажется, что они ограничены базовыми типами, но я могу ошибаться.

Ответы [ 4 ]

3 голосов
/ 17 июня 2010

Посмотрите на ASP.NET ViewState . Вы также должны знать, что многие ошибки, если вы используете его, в том числе раздувание размера страницы и проблемы с производительностью. Код C # (извините. Я не очень хорош в VB) будет:

List<int> MyList
{
    get { return (List<int>) ViewState["mylist"]; }
    set { ViewState["mylist"] = value; }
}

Примечание: Не забудьте инициализировать эту переменную.

Примечание по использованию состояния сеанса: Это не будет работать, если у пользователя одновременно открыто 2 или более окон.

2 голосов
/ 17 июня 2010

С ASP.Net он создает новый экземпляр вашего класса Code Behind при каждой загрузке страницы, поэтому переменные уровня класса сбрасываются.

Ваш лучший вариант, вероятно, - сохранить Список, который вы хотите сохранить в Сессии.Если это упростит задачу, вы можете создать метод получения списка, который считывает данные из переменной сеанса.В C # это будет выглядеть так:

private List MyList
{
    get { return Session["ListKey"] as List; }
    set { Session["ListKey"] = value; }
}
1 голос
/ 17 июня 2010

Если вы хотите сохранить переменную, которая требуется только на этой конкретной странице, а не на любой другой странице, при условии, что у вас есть многостраничное веб-приложение, вы можете использовать свою страницу ViewState для сохранения переменных, которые вы хочу сохраняться от запроса к запросу.

Если вам нужно, чтобы ваша переменная сохранялась на разных страницах, вы можете использовать Session для ее сохранения.

Теперь, когда вы используете ViewState, вы должны учитывать, что если вы храните там большие объекты или у вас много элементов управления на вашей странице, огромная строка (закодированное представление состояния) перемещается назад и вперед между обратными передачами, увеличивая время загрузки. и время выполнения.

0 голосов
/ 17 июня 2010

Вот код, который я использовал в итоге.

Private Property ChangedControls() As List(Of Control)
    Get
        Return DirectCast(Session("changedControls"), List(Of Control))
    End Get
    Set(ByVal value As List(Of Control))
        Session("changedControls") = value
    End Set
End Property

Назначение нового списка при загрузке страницы работало просто отлично.

...