How to use TempData Keep() vs Peek() in ASP.NET MVC

Your object in a TempDataDictionary is read, it will be marked for deletion at the end of that request

That means if you put something on TempData like

TempData["category"] = "your value";

first request

object value = TempData["catetory"];

second request

object value = TempData["category"];
//value = null

If you want to keep value you can use Keep method.

object value = TempData["category"];
//keep it to use later
TempData.Keep("value");
//second request, read value and mark it for deletion
object value = TempData["category"];

If you want to retain the value for another request, you can use Peek. Use Keep when retaining the value depends on additional logic.

//It will be not deleted at the end of the request
object value = TempData.Peek("category");
//second request, read value and mark it for deletion
object value = TempData["category"];