답변:
한 문장으로 : TempData
ViewData와 비슷하지만 한 가지 차이점이 있습니다. 두 개의 연속 요청 사이의 데이터 만 포함하고 그 후에는 삭제됩니다. TempData
오류 메시지 또는 유사한 것을 전달 하는 데 사용할 수 있습니다 .
구식이지만 이 문서 에는 TempData
수명주기에 대한 좋은 설명이 있습니다.
TempData는 단일 요청에 사용할 수있는 세션 지원 임시 스토리지 사전입니다. 컨트롤러간에 메시지를 전달하는 것이 좋습니다.
TempData
메서드에서 메서드로 전달되는 간단한 사전보다 훨씬 더 복잡한 (세션) 가능성이 있다는 점에서 매우 큰 차이라고 생각합니다
작업이 RedirectToAction 결과를 반환하면 HTTP 리디렉션 (Response.Redirect와 동일)이 발생합니다. 단일 HTTP 리디렉션 요청 기간 동안 컨트롤러의 TempData 속성 (사전)에 데이터를 보존 할 수 있습니다.
ViewData :
ViewData
사전 유형입니다. public ViewDataDictionary ViewData { get; set; }
ControllerBase
의 부모 인의 속성Controller
TempData :
TempData
내부적으로 사용 TempDataDictionary
:public TempDataDictionary TempData { get; set; }
TempDataDictionary
객체에 저장되면 :
이 동작은 ASP.NET MVC 2 및 이후 버전의 새로운 기능입니다. 이전 버전의 ASP.NET MVC에서는 TempData
다음 요청까지만 의 값을 사용할 수있었습니다.
MVC에서 ViewData, ViewBag, TempData 및 Session의 비교를 자세히 참조하십시오.
이 비교가 유용하다는 것을 알았습니다. http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html
내가 만난 한 가지 문제점은 TempData 값이 기본적으로 읽힌 후 지워진다는 것입니다. 옵션이 있습니다 . 자세한 내용은 Msdn의 'Peek'및 'Keep'메서드를 참조하세요 .
뷰 데이터는 컨트롤러에서 해당 뷰로 데이터를 전달하고자 할 때 사용됩니다. 뷰 데이터는 수명이 매우 짧기 때문에 리디렉션이 발생하면 파괴됩니다. 예 (컨트롤러) :
public ViewResult try1()
{
ViewData["DateTime"] = DateTime.Now;
ViewData["Name"] = "Mehta Hitanshi";
ViewData["Twitter"] = "@hitanshi";
ViewData["City"] = "surat";
return View();
}
try1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@ViewData["Name"]</td>
<td>@ViewData["Twitter"]</td>
<td>@ViewData["City"]</td>
</tr>
</table>
TempData는 컨트롤러간에 또는 작업간에 데이터를 전송합니다. 일회성 메시지를 저장하는 데 사용되며 수명이 매우 짧습니다. TempData.Keep ()를 사용하여 모든 작업을 통해 사용할 수 있도록하거나 영구적으로 만들 수 있습니다.
예 (컨트롤러) :
public ActionResult try3()
{
TempData["DateTime"] = DateTime.Now;
TempData["Name"] = "Ravina";
TempData["Twitter"] = "@silentRavina";
TempData["Email"] = "Ravina12@gmail.com";
TempData["City"] = "India";
TempData["MobNo"] = 9998975436;
return RedirectToAction("TempView1");
}
public ActionResult TempView1()
{
return View();
}
TempView1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@TempData["Name"]</td>
<td>@TempData["Twitter"]</td>
<td>@TempData["Email"]</td>
<td>@TempData["City"]</td>
<td>@TempData["MobNo"]</td>
</tr>
</table>
TempData에 대한 참고 사항입니다.
그 안에있는 데이터는 다음 요청 까지 저장되지 않고 다음 읽기 작업 이 호출 될 때까지 저장됩니다 !
참조 :
TempData는 두 번째 요청 후 삭제되지 않습니다.
TempData
여기 stackoverflow.com/a/17199709/2015869