ViewState По сравнению с Сессией … поддерживающий объект в течение жизненного цикла страницы

Кто-то может объяснить различие между ViewState и Сессией?

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

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

Например:

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?

40
задан Ryan Kohn 28 August 2012 в 15:13
поделиться

2 ответа

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

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

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

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

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

60
ответ дан 27 November 2019 в 01:24
поделиться

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

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

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

28
ответ дан 27 November 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: