2016-01-22 1 views
1

Почему 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> 
+0

Используйте ViewBag или ViewData на месте ваших tempdata. Причина в том, что Tempdata полезен только для контроллера для передачи данных контроллера. Также, как только вы его прочитаете, жизнь закончилась. –

+0

viewbag и viewdata: Если перенаправление происходит, то это значение становится null. – testStack201541

ответ

3

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

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

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

Источник: TempDataDictionary Class

Для меня было интересно о его жизненном цикле, так что я пошел через исходный код и писал о нем, если заинтересованы в дальнейшем чтении: Inner-workings of TempData in ASP.NET MVC 5

Вы также можете вызвать PEEK метод для получения ценностей и все еще сохраняя их.

 Смежные вопросы

  • Нет связанных вопросов^_^