Цель — передать объект с одной страницы на другую. Объект помещается в сессию, для этого генерируется уникальный идентификатор (GUID), по которому объект извлекается из сессии на другой странице.

GUID (Globally Unique Identifier) — статистически уникальный 128-битный идентификатор. Его главная особенность — уникальность, которая позволяет создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов.

var guid = Guid.NewGuid().ToString();

Передача Limit Function

В Page_Load создать Limit Function:

var ld = ExternalLangDef.LanguageDef;
Function f = ld.GetFunction(ld.funcEQ,new VariableDef(ld.StringType, "Name"),"Имя");

Передача объекта

Описывать класс, отметить его как Serialisable, создать экземпляр класса:

[Serializable]
public class Person
{
  public string Name;

  public Person()
  {
     this.Name = "unknown";
  }
}

var f = new Person();

Сохранение объекта в сессии

Поместить объект f в сессию по ключу GUID:

HttpContext.Current.Session[guid] = f;

Передача идентификатора в строке запроса

Создать ссылку на странице

<asp:HyperLink runat="server" ID="MyLink" Text="Передать объект"></asp:HyperLink>

Для ссылки указать URL, в параметре guid указать идентификатор:

MyLink.NavigateUrl = "~/SessionTest.aspx?guid=" + guid;

Получение объекта из сессии

На принимающей странице считать GUID из строки запроса, по нему считать объект из сессии:

string guid = Request.QueryString.Get("guid");
var myObject = Context.Session[guid];

ISerializable

Отказоустойчивость при хранении значений состояния сеанса

Состояние сеанса может завершиться (по умолчанию через 20 минут бездействия), и данные могут быть потеряны. Временем жизни состояния сеанса можно управлять при помощи атрибута timeout раздела конфигурации sessionState.

В зависимости от требований приложения может понадобиться альтернативный состоянию сеанса способ хранения данных каждого пользователя. ASP.NET предоставляет дополнительные параметры для сохранения данных в приложении. Их сравнение содержится в разделе Рекомендации по управлению состоянием ASP.NET.