2014-11-24 4 views
2

Вопрос в том, как можно передавать TempData между разными контроллерами? Естественно, поскольку контексты контроллера различны, один контроллер не должен иметь доступ к tempdata в другом, тогда как tempdata может быть просто передан между Action Results в контексте одного контроллера.Передача TempData между контроллерами

Но предположим, что ситуация требует перекрестной связи с контроллером OVER TempData, и TempData будет требовать (независимо от того, является ли это хорошей практикой или плохой практикой), возможно ли это?

ответ

2

Да, это возможно, поскольку TempData поддерживается SessionState. Это, по сути, частный случай состояния сеанса с более коротким сроком службы.

Вот подобный вопрос/ответ Passing data between different controller action methods

+0

Спасибо за ваш фантастический прямой вперед ответ TGH. Добавим немного больше подробностей о том, как именно это можно сделать, например, предоставив пример. – JAX

+1

Добавлена ​​ссылка, которая может помочь – TGH

+0

Это не перекрестный контроллер, он объясняет переход между Действиями внутри Контроллера. Допустим, контроллер X имеет действие, которое перенаправляется на действие в контроллере Y. Теперь, если вы используете tempdata, оно не будет получено controlelr y – JAX

0

TempData представляет собой словарь, полученный из класса TempDataDictionary и хранится в короткой жизни сессии, и она является ключевым и значением объекта строки. Разница в том, что жизненный цикл объекта. TempData хранит информацию на время HTTP-запроса. Это означает только с одной страницы на другую. Это также работает с перенаправлением 302/303, потому что оно находится в одном HTTP-запросе. Помогает поддерживать данные при переходе от одного контроллера к другому контроллеру или от одного действия к другому действию. Другими словами, когда вы поменяете, «TempData» помогает сохранить данные между этими переадресовывает

Для получения дополнительной информации What is ViewData, ViewBag and TempData?

0

Я искал для этого, как хорошо. В моем случае я сделал запрос ajax, который вставлял некоторые данные в временные данные. Впоследствии я бы перенаправил javascript на другой контроллер/действие. После выхода поискав я узнал, что в моем случае я должен был назвать

TempData.Keep(); 

Это позволит сохранить данные временные для следующего запроса, несмотря на то, вы не используете RedirectToAction