HttpContext.Session.SetInt32("Id", userModel.Id);
HttpContext.Session.SetString("UserId", userModel.UserId);
TempData("UserId") = userModel.UserId;
return RedirectToAction("Index", "Post");
다음과 같이 인코딩하면 TempData(“UserId”)를 뷰 페이저에 전달할 수 있습니다.
HttpContext.Session.SetInt32("Id", userModel.Id);
HttpContext.Session.SetString("UserId", userModel.UserId);
ViewData("UserId") = userModel.UserId;
return RedirectToAction("Index", "Post");
보기 페이지에 ViewData(“UserId”)를 전달할 수 없습니다.
RedirectToAction 메서드는 새로운 요청을 생성하기 때문에 이전 요청에서 설정한 ViewData와 같은 데이터는 새로운 요청으로 넘어가지 않습니다.
이러한 이유로 RedirectToAction 이후 새로운 요청에서 해당 데이터를 다시 설정해야 합니다.
그게 무슨 뜻 이니
HTTP는 클라이언트-서버 모델을 따르는 프로토콜입니다.
클라이언트는 서버에 요청을 보내고 서버는 요청에 대한 응답을 클라이언트에 보냅니다.
이 시점에서 각 요청과 응답은 독립적으로 처리됩니다.
따라서 이전 요청이 처리되지 않는 이유는 새로운 요청이 도착했기 때문입니다.
새 요청에 대한 응답을 준비하고 처리하는 동안 서버는 이전 요청 처리를 일시 중지하고 새 요청 처리에 우선 순위를 둡니다.
이를 통해 서버는 더 높은 처리량과 더 빠른 응답 시간을 제공할 수 있습니다.
하지만 TempData는 Session으로 구현됩니다.
다만 TempData는 일반세션과 달리 데이터를 한 번 사용한 후 삭제하므로 다음과 같이 코드를 구성할 수 있다.
public IActionResult Index()
{
TempData("Message") = "Hello World";
return RedirectToAction("About");
}
public IActionResult About()
{
ViewData("Message") = TempData("Message");
return View();
}
이는 View()가 새 요청이 아니라 현재 요청에서 보기 페이지를 반환하기 때문입니다.