Описание тега tempdata
TempData внутренне использует сеанс для хранения своих данных, но, в отличие от переменных сеанса, TempData очищает себя.
Сходства с ViewData
TempData имеет некоторое сходство с ViewData. Оба они являются словарями, которые используют строки в качестве ключей и могут хранить примитивы или объекты для значения. Live ViewData, его можно использовать в качестве альтернативы модели для передачи данных от контроллера в представление.
Контроллер
public ActionResult TempTest()
{
TempData["ContentString"] = "some text";
TempData["ContentInt"] = 1;
TempData["ContentBool"] = true;
TempData["ContentDate"] = DateTime.Now;
TempData["ContentObj"] = new SomeClass
{
SomeProp = "some text"
};
return View();
}
Посмотреть
<div>
TempData content string: @TempData["ContentString"]
</div>
<div>
TempData content integer: @TempData["ContentInt"]
</div>
<div>
TempData content boolean: @TempData["ContentBool"]
</div>
<div>
TempData content date: @TempData["ContentDate"]
</div>
@{
var tempDataContent = (SomeClass) TempData["ContentObj"];
}
<div>
TempData content object: @tempDataContent.SomeProp
</div>
Результат
<div>
TempData content string: some text
</div>
<div>
TempData content integer: 1
</div>
<div>
TempData content boolean: True
</div>
<div>
TempData content date: 4/16/2019 9:50:05 AM
</div>
<div>
TempData content object: some text
</div>
Отличия от ViewData
TempData хранит свои данные в течение всего HTTP-запроса. Это означает, что, в отличие от ViewData, данные в TempData не будут очищены после перенаправления.
Контроллер
public ActionResult TempTest1()
{
TempData["Content"] = "some text";
ViewData["Content"] = "some text";
return RedirectToAction("TempTest");
}
public ActionResult TempTest()
{
return View();
}
Посмотреть
<div>
TempData content: @TempData["Content"]
</div>
<div>
ViewData content: @ViewData["Content"]
</div>
Результат
<div>
TempData content: some text
</div>
<div>
ViewData content:
</div>
Как только HTTP-запрос выполнен, TempData блокируется, поэтому следующий сделанный HTTP-запрос вернет только значение NULL для TempData.
Контроллер
public ActionResult TempTest()
{
TempData["Content"] = "some text";
return View();
}
public ActionResult TempLifeTest()
{
return View();
}
Просмотр - TempTest.cshtml
<div>
TempData content: @TempData["Content"]
</div>
Просмотр - TempLifeTest.cshtml
<div>
TempData content: @TempData["Content"]
</div>
Результат - TempTest.cshtml
<div>
TempData content: some text
</div>
Результат - TempLifeTest.cshtml
<div>
TempData content:
</div>
Чтобы TempData сохранила свои значения для последующего запроса, используйте TempData.Keep()
Контроллер
public ActionResult TempTest()
{
TempData["Content"] = "some text";
TempData.Keep();
return View();
}
public ActionResult TempLifeTest()
{
return View();
}
Просмотр - TempTest.cshtml
<div>
TempData content: @TempData["Content"]
</div>
Просмотр - TempLifeTest.cshtml
<div>
TempData content: @TempData["Content"]
</div>
Результат - TempTest.cshtml
<div>
TempData content: some text
</div>
Результат - TempLifeTest.cshtml
<div>
TempData content: some text
</div>
Вы можете продолжать вызывать TempData.Keep() столько, сколько хотите, чтобы данные сохранялись для каждого последующего запроса.
Ссылки