почему tempData всегда имеет значение null при добавлении многих элементов в tempData?

почему TempData всегда имеет значение null при добавлении многих элементов в TempData?

мой код в контроллере:

TempData[Partial1.TempDataKey] = "bla bla";
TempData[Partial2.TempDataKey] = "bla bla 2";

мой код в макете:

@{Html.RenderPartial(MVC.Administrator.Shared.Views._Partial1);}
@{Html.RenderPartial(MVC.Administrator.Shared.Views._Partial2);}

мой код в _Partial1:

<span>@(TempData.ContainsKey(Partial1.TempDataKey))</span>

мой код в _Partial2:

<span>@(TempData.ContainsKey(Partial2.TempDataKey))</span>

результат всегда:

<span>False</span>
<span>False</span>

когда я удаляю один из них в контроллере:

TempData[Partial1.TempDataKey] = "bla bla";
//TempData[Partial2.TempDataKey] = "bla bla 2";

тогда результат:

  <span>True</span>

person testStack201541    schedule 22.01.2016    source источник
comment
Используйте ViewBag или ViewData вместо ваших tempdata. Причина в том, что Tempdata полезен только для передачи данных от контроллера к контроллеру. Кроме того, как только вы прочтете это, его жизнь закончится.   -  person Nithin Paul    schedule 22.01.2016
comment
viewbag и viewdata : если происходит перенаправление, его значение становится нулевым.   -  person testStack201541    schedule 22.01.2016


Ответы (1)


Переменные в TempData автоматически помечаются для удаления после обращения к ним. Вы можете сохранить их, явно вызвав метод Keep

Вы можете использовать объект TempDataDictionary для передачи данных так же, как вы используете объект ViewDataDictionary. Однако данные в объекте TempDataDictionary сохраняются только от одного запроса к другому, если вы не отметите один или несколько ключей для хранения с помощью метода Keep. Если ключ помечен для сохранения, он сохраняется для следующего запроса.

Типичное использование объекта TempDataDictionary — передача данных из метода действия, когда он перенаправляется на другой метод действия. Например, метод действия может хранить информацию об ошибке в свойстве TempData контроллера (которое возвращает объект TempDataDictionary) перед вызовом метода RedirectToAction. Затем следующий метод действия может обработать ошибку и отобразить представление, отображающее сообщение об ошибке.

Источник: Класс TempDataDictionary< /а>

Мне было любопытно узнать его жизненный цикл, поэтому я просмотрел исходный код и написал об этом в блоге, если мне интересно дальнейшее чтение: Внутренняя работа TempData в ASP.NET MVC 5

Вы также можете вызвать метод Peek для извлечения значений и сохранения их.

person Volkan Paksoy    schedule 22.01.2016