Life Cycle of TempData in ASP.Net MVC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public ActionResult ViewInfo(string memId, CommonModel param)
{
//파라미터가 없는 접근을 차단
if (!NoParamValueCheck(memId))
{
return RedirectToAction("NoParameterValue", "Home");
}

MemberView M = new MemberView
{
CommonParam = param
,
MemberInfo = _MemberService.MemberView(memId, MemberInfo.GetMemberGradeCode(), param)
};

//의도적인 예외처리
if (M.MemberInfo == null)
{
CustomLog4Net customLog = new CustomLog4Net();
customLog.ErrorToLog(this.ControllerContext);
return RedirectToAction("WrongParameterValue", "Home");
}

return View(M);
}

상세화면 -> 수정화면 -> 수정완료 -> 다시 상세화면 이라는 시나리오상에서 void형 EditProc Controller를 사용했지만 실제로 프로시저에서는 @returnValue 라는 int형 결과를 리턴 하는 상황입니다 Model에서 부터 out Parameter로 결과를 받는 변수를 받아왔으며 실제 EditProc Controller는

1
return RedirectToAction("ViewInfo", new { memId = dto.memId, viewParam = param });

를 리턴 합니다, 이때 ViewBag으로 결과값을 유지할 줄…알았습니다 이게 저에게는 애매한 부분 이었어서 TempData로 경했던 과정과 이유를 남겨놓습니다.
html bootstrap template 같은 거 찾아보면 1회 휘발성 notification box 등을 많이 제공하더라고요 PHP나 Classic ASP같은거로 작업한다고 하면 catch처리를 했던 기억이 있네요…왜 그렇게 무식하게 했었을까요….그게 더 공수가 들어갔거든요..
각설하고 View.cshtml에서
view.cshtml
1
resultNum TempData : @TempData["resultNum"]

이렇게 TempData를 호출하면 새로고침시 정보가 사라지는 현상을 볼 수 있습니다…

여기서 TempData의 구간은 Controller <-> Controller 이렇게 명시되어 있습니다, ViewBag, ViewData와는 확실히 용도가 분리되어 있습니다.
TempData.Keep 등으로 생명 주기를 연장도 가능합니다, 그런데..특별한 사유가 아니라면 사용할 일이 없어 보이네요.
사실 말이 거창합니다만..
아래와 같은 시나리오 입니다..

Author: jklee@lenscloth.io
Link: https://lenscloth-ko.github.io.git/2016/01/25/Life-Cycle-of-TempData-in-ASP-Net-MVC/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.