TempData может использоваться для хранения переходных данных.Это полезно для перенаправления, когда данные необходимы для более чем одного запроса. Когда объект в TempDataDictionary читается, он будет помечен для удаления в конце этого запроса.
Это означает, что если вы поставитечто-то в TempData, например
TempData["value"] = "someValueForNextRequest";
И при следующем обращении к нему вы получите доступ к значению, но как только вы его прочитаете, оно будет помечено для удаления:
//second request, read value and is marked for deletion
object value = TempData["value"];
//third request, value is not there as it was deleted at the end of the second request
TempData["value"] == null
Методы Peek и Keep позволяют прочитать значение, не помечая его для удаления.Скажем, мы возвращаемся к первому запросу, в котором значение было сохранено в TempData.
С Peek вы получаете значение, не помечая его для удаления одним вызовом, см. msdn :
//second request, PEEK value so it is not deleted at the end of the request
object value = TempData.Peek("value");
//third request, read value and mark it for deletion
object value = TempData["value"];
С помощью Keep вы указываете ключ, помеченный для удаления, который вы хотите сохранить.Получение объекта и последующее сохранение его от удаления - это два разных вызова.См. msdn
//second request, get value marking it from deletion
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");
//third request, read value and mark it for deletion
object value = TempData["value"];
Вы можете использовать Peek, когда вы всегда хотите сохранить значение для другого запроса.Используйте Keep, когда сохранение значения зависит от дополнительной логики.
Внесите следующие изменения в действие Get
public IActionResult UserInfo()
{
//The First method ,
string s = (string)TempData.Peek("Model");
//The Second method
string s = (string)TempData["Model"];
TempData.Keep("Model");
if(s==null)
{
return View();
}
else
{
User model = JsonConvert.DeserializeObject<User>(s);
return View(model);
}
}