Кто-то может объяснить различие между 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?
Если объект поиска невелик по размеру, используйте ViewState. ViewState идеально подходит, если вы хотите, чтобы объект существовал только в течение жизненного цикла текущей страницы.
Объект сеанса также можно использовать, но очевидно, что как только объект поиска окажется там, он будет существовать дольше жизненного цикла страницы.
Кроме того, с объектами ViewState / Session я делаю еще одну вещь - оборачиваю их доступ с помощью свойства:
public object GetObject
{
get
{
return ViewState["MyObject"];
}
set
{
ViewState["MyObject"] = value;
}
}
Я предпочитаю делать это таким образом. Просто измените приведенный выше код в соответствии со своими потребностями.
Прежде всего Viewstate находится на странице, где сеанс существует во всем приложении во время текущего сеанса, если вы хотите, чтобы ваш поисковый объект сохранялся между страницами, то сеанс - это правильный путь.
Во-вторых, Viewstate передается в виде зашифрованного текста между браузером и сервером при каждой обратной передаче, поэтому чем больше вы храните в Viewstate, тем больше данных каждый раз передается и возвращается от клиента, тогда как сеанс хранится на стороне сервера, и единственное, что передается вперед и назад, - это идентификатор сеанса, либо в виде файла cookie, либо в URL-адресе.
Будет ли сессия или состояние просмотра подходящим местом для хранения вашего поискового объекта, зависит от того, что вы делаете с ним и какие данные в нем содержатся. Надеюсь, что приведенное выше объяснение поможет вам выбрать правильный метод для использования.