ViewState Vs Session ... поддержание объекта в течение жизненного цикла страницы - PullRequest
39 голосов
/ 21 мая 2010

Может кто-нибудь объяснить разницу между 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 ]

58 голосов
/ 21 мая 2010

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

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

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

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

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

28 голосов
/ 21 мая 2010

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

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

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

1 голос
/ 28 июня 2016

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

...