Есть ли способ, чтобы предотвратить ASP.Net веб-приложений от очистка переменных страницы на VB стороны?


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

4 3

4 ответа:

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

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

private List MyList
{
    get { return Session["ListKey"] as List; }
    set { Session["ListKey"] = value; }
}

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

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

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

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

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

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

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

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

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

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