Подтвердить что ты не робот

ViewState Vs Session... сохранение объекта через жизненный цикл страницы

Может кто-нибудь объяснить разницу между ViewState и Session?

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

В настоящее время я использую Session для этого, но я не уверен, что это лучший способ.

Например:

SearchObject searchObject;
protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
         searchObject = new SearchObject();
         Session["searchObject"] = searchObject;
     }
     else
     {
         searchObject = (SearchObject)Session["searchObject"];
     }
}

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

Я думаю, что должен быть лучший способ сделать это, чтобы .NET не обновлял объект каждый раз при загрузке страницы, а также помещал его в глобальную область класса Page? >

4b9b3361

Ответ 1

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

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

Кроме того, одна вещь, которую я делаю с объектами ViewState/Session, сворачивает их доступ с помощью свойства:

public object GetObject
{
    get
    {
        return ViewState["MyObject"];
    }
    set
    {
        ViewState["MyObject"] = value;
    }
}

Я, как правило, считаю его более чистым, чтобы сделать это таким образом. Просто измените приведенный выше код в соответствии с вашими потребностями.

Ответ 2

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

Во-вторых, Viewstate передается как зашифрованный текст между браузером и сервером с каждой обратной передачей, поэтому чем больше вы храните в ViewState, тем больше данных каждый раз возвращается и возвращается от клиента, тогда как сеанс хранящейся на сервере, и единственное, что происходит взад и вперед, - это идентификатор сеанса, либо как файл cookie, либо URL.

Независимо от того, будет ли сеанс или область просмотра правильным местом для хранения вашего объекта поиска, зависит от того, что вы делаете с ним и какие данные в нем, надеюсь, приведенное выше объяснение поможет вам выбрать правильный метод для использования.

Ответ 3

Состояние представления является специфичным для страницы, где в качестве состояния сеанса используется конкретный браузер. Вы не сможете передавать данные с одной страницы на другую через состояние представления. Но вы будете делать с состоянием сеанса. Каждый сеанс имеет уникальный идентификатор, где в качестве состояния представления хранятся данные в скрытых полях на самой странице. Сессия хранит данные на стороне сервера, в которых хранятся данные состояния, хранящиеся на странице, что делает страницу тяжелой и медленной. Каждый элемент управления имеет состояние представления true по умолчанию, которое сохраняет свое состояние (состояние управления), мы можем легко включить или отключить его, сделав enableviewstate = false