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

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

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

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

например:

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

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

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

3 ответов


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

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

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

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

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


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

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

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


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