재우니의 블로그

 

 

asp.net mvc 에는 TempData 가 존재하며 용도는 하나의 페이지에서 다른 페이지도 이동하고나서도 특정 데이터를 들고 다닐 수 있는 짝퉁? session 과 비슷한 기능을 제공합니다. 아래 그림과 같이 controller 와 controller 사이간에 유지가 가능하다는 뜻입니다. 보통 입력을 하고 나서 저장을 누른 다음에 보기 화면이나 리스트 화면으로 이동하게 됩니다. 저장을 처리한 controller 에 tempdata 에 데이터를 담아, 이동한  보기 화면이나 목록의  controller 에  전달 받은 값을 사용하고자 할때 사용합니다.

 

 

 

 

TempData 는 아래 tree 형태 중 2번과 같이 한번 읽게 되면 자동 삭제 되어 다시는 다른 controller 에서 읽을 수 없답니다. 뭐~ 전달된 controller 에서 사용하지 않으면 1번처럼 다음 요청까지 유지됩니다.

 

 

 

하지만 읽게 될 경우 다른 controller 에도 사용 유지하고자 한다면 4번처럼 읽을 때  TempData.Peek(key값) 으로 읽으면 다음 요청 controller 에서도 사용이 가능합니다. 또는 3번처럼 Keep() 함수를 통해서도 유지가 가능합니다.

 

var tempDataEmployeet = TempData.Peek("emp") as Employee;

 

 

TempData 는 Keep() 이라는 메소드를 호출하면 지속적으로 TempData 를 지속적으로 사용이 가능합니다.

viewbag 과 달리 형변환을 해서 사용이 가능하며, 이를 다시 유지시키기 위해 TempData.Keep() 함수를 호출했습니다.

 

 @model MyProject.Models.EmpModel;
 @{
   Layout = "~/Views/Shared/_Layout.cshtml";
   ViewBag.Title = "About";
   var tempDataEmployeet = TempData["emp"] as Employee; //형변환이 필요함.
   TempData.Keep(); // 모든 TempData 를 다시 유지시켜주는 함수
}

 

 

그러면 여러가지 TempData 에서 특정하나의 키값에만 유지하고자 한다면 TempData.Keep("유지key 값"); 으로 사용이 가능합니다.

 

 

 @model MyProject.Models.EmpModel;
 @{
   Layout = "~/Views/Shared/_Layout.cshtml";
   ViewBag.Title = "About";
   var tempDataEmployeet = TempData["emp"] as Employee; //형변환이 필요함.
   TempData.Keep("emp"); // emp 라는 TempData 를 다시 유지시켜주는 함수
}

 

이제 다시 tempdata 를 정리 하자면...

 

1. TempData 의 데이터는 한번 읽고 나서는 삭제하는 임시 데이터 스토리지 이다.

2. TempData 는 TempData.Keep(key) 를 통해서 다시 한번 지속 유지할 수 있다.

3. TempData.Keep() 함수는 RedirectResult 나 RedirectToRouteResult 함수를 사용해야 다시 재유지가 가능합니다.