Объект типа TempData в WebForms - состояние сеанса только для 1 дополнительного запроса - PullRequest
6 голосов
/ 29 августа 2009

Я хотел бы хранить некоторые объекты только для одного запроса через состояние сеанса. Я не могу придумать простой способ сделать это. Это точно , что делает объект TempData в ASP.NET MVC. Может ли кто-нибудь предоставить мне ссылку или несколько примеров того, как заставить объект в состоянии сеанса выдержать только один дополнительный запрос?

Я думал, что это может быть достигнуто путем создания пользовательского словарного объекта, который хранит возраст (количество запросов) для каждого элемента. Подписавшись на методы Application_BeginRequest и Application_EndRequest, вы можете выполнить необходимую очистку объектов. Это может даже облегчить создание объекта, который хранит часть данных для X-запросов, а не только один. Это на правильном пути?

Ответы [ 2 ]

1 голос
/ 19 июля 2010

Я реализовал нечто очень похожее на то, что вы описываете в методе Application_AcquireRequestState файла Global.ascx.cs. Все мои сеансовые объекты упакованы в класс, который ведет подсчет количества чтений.

// clear any session vars that haven't been read in x requests
List<string> keysToRemove = new List<string>();
for (int i = 0; HttpContext.Current.Session != null && i < HttpContext.Current.Session.Count; i++)
{
    var sessionObject = HttpContext.Current.Session[i] as SessionHelper.SessionObject2;
    string countKey = "ReadsFor_" + HttpContext.Current.Session.Keys[i];
    if (sessionObject != null/* && sessionObject.IsFlashSession*/)
    {
        if (HttpContext.Current.Session[countKey] != null)
        {
            if ((int)HttpContext.Current.Session[countKey] == sessionObject.Reads)
            {
                keysToRemove.Add(HttpContext.Current.Session.Keys[i]);
                continue;
            }
        }
        HttpContext.Current.Session[countKey] = sessionObject.Reads;
    }
    else if (HttpContext.Current.Session[countKey] != null)
    {
        HttpContext.Current.Session.Remove(countKey);
    }
}

foreach (var sessionKey in keysToRemove)
{
    string countKey = "ReadsFor_" + sessionKey;
    HttpContext.Current.Session.Remove(sessionKey);
    HttpContext.Current.Session.Remove(countKey);
}
0 голосов
/ 24 июня 2010

Вы можете найти что-то очень похожее здесь: http://maff.ailoo.net/2009/06/build-a-flashmessenger-system-in-aspnet-mvc/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...