В MVC 1 да, временные данные теряются после следующего запроса после сохранения ключа.
Однако в MVC 2 временные данные теряются после первой попытки доступа к ним.
Вы всегда можете использовать Session, который TempData использует в любом случае, для решения проблемы временной потери данных.
Из примечаний к выпуску бета-версии MVC 2:
Улучшения TempDataDictionary
Поведение TempDataDictionary
класс был немного изменен на
сценарии адреса, где временные данные были
удалены преждевременно или
сохранялась дольше, чем необходимо. За
Например, в тех случаях, когда временные данные были
прочитайте в том же запросе, в котором это
был установлен, временные данные сохранялись
для следующего запроса, хотя
Намерение было удалить его. В других
случаи, временные данные не были сохранены
через несколько последовательных перенаправлений.
Для решения этих сценариев
Класс TempDataDictionary был изменен
так что все ключи выживают
до тех пор, пока ключ не будет прочитан
из объекта TempDataDictionary.
Метод Keep был добавлен в
TempDataDictionary, чтобы вы могли указать
что значение не должно быть удалено
после прочтения.
RedirectToActionResult является примером
где метод Keep вызывается в
Для того чтобы сохранить все ключи для
следующий запрос.
Вы также можете посмотреть прямо в источнике MVC 2, чтобы увидеть эти изменения:
MVC 1:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
return value;
}
return null;
}
set {
_data[key] = value;
_modifiedKeys.Add(key);
}
}
MVC 2:
public object this[string key] {
get {
object value;
if (TryGetValue(key, out value)) {
_initialKeys.Remove(key);
return value;
}
return null;
}
set {
_data[key] = value;
_initialKeys.Add(key);
}
}