Вы никогда не должны возвращать представление из действия контроллера, которое что-то сохраняет в TempData.Вы должны немедленно перенаправить к действию контроллера, которое должно его использовать:
public class SomeController : Controller
{
public ActionResult SomeAction()
{
TempData["id"] = "someData";
return Redirect("AnotherAction", "Another");
}
}
public class AnotherController : Controller
{
public ActionResult AnotherAction()
{
string data = Convert.ToString(TempData["id"]);
return View();
}
}
Причина этого в том, что TempData сохраняется только для одного дополнительного запроса.Например, если внутри представления вы отправляете запрос AJAX для какого-либо действия контроллера (независимо от того, какой именно), а затем в этом представлении есть ссылка, указывающая на целевое действие, когда пользователь перенаправляется на это целевое действие, TempData больше не будеттак как он был потерян во время ранее выполненного запроса AJAX.
Если вам нужно хранить данные дольше, чем одно перенаправление, вы можете использовать Session.