TempData не уничтожается после второго запроса

Я помещаю значение в TempData при первом запросе в фильтре действий.

filterContext.Controller.TempData["value"] = true;

после этого приходит второй запрос, и я проверяю значение

filterContext.Controller.TempData.ContainsKey("value")

ценность есть. Затем приходит третий запрос, и я снова проверяю значение

filterContext.Controller.TempData.ContainsKey("value")

и значение все еще присутствует. Разве это значение не должно быть уничтожено после второго запроса? Все запросы являются запросами AJAX.


person user49126    schedule 10.10.2012    source источник


Ответы (1)


Разве это значение не должно быть уничтожено после второго запроса?

Только если вы это прочитаете:

var value = filterContext.Controller.TempData["value"];

Если вы не прочитаете значение из TempData, оно не будет удалено.

Вот как определяется геттер TempData.Items:

public object get_Item(string key)
{
    object obj2;
    if (this.TryGetValue(key, out obj2))
    {
        this._initialKeys.Remove(key);
        return obj2;
    }
    return null;
}

Обратите внимание, что значение будет вытеснено, только если вы вызовете метод получения и только если значение было найдено в коллекции. В коде, который вы показали, все, что вы делаете, это проверяете, содержит ли TempData данный ключ, но вы не читали значение этого ключа.

Вы можете вручную исключить значение TempData, если хотите:

filterContext.Controller.TempData.Remove("value");

А еще есть метод, который позволяет прочитать значение, не удаляя его:

var value = filterContext.Controller.TempData.Peek("value");
person Darin Dimitrov    schedule 10.10.2012