Programing

ViewData와 TempData의 차이점은 무엇입니까?

lottogame 2020. 8. 30. 19:38
반응형

ViewData와 TempData의 차이점은 무엇입니까?


ViewData가 무엇인지 알고 항상 사용하지만 ASP.NET Preview 5에서는 TempData라는 새로운 것을 도입했습니다.

나는 일반적으로 객체 사전 접근 방식을 사용하는 대신 내 ViewData를 강력하게 입력합니다.

그렇다면 언제 ViewData 대신 TempData를 사용해야합니까?

이에 대한 모범 사례가 있습니까?


한 문장으로 : TempDataViewData와 비슷하지만 한 가지 차이점이 있습니다. 두 개의 연속 요청 사이의 데이터 만 포함하고 그 후에는 삭제됩니다. TempData오류 메시지 또는 유사한 것을 전달 하는 사용할 수 있습니다 .

구식이지만 이 문서 에는 TempData수명주기에 대한 좋은 설명이 있습니다.

Ben Scheirman이 여기에서 말했듯 :

TempData는 단일 요청에 사용할 수있는 세션 지원 임시 스토리지 사전입니다. 컨트롤러간에 메시지를 전달하는 것이 좋습니다.


작업이 RedirectToAction 결과를 반환하면 HTTP 리디렉션 (Response.Redirect와 동일)이 발생합니다. 단일 HTTP 리디렉션 요청 기간 동안 컨트롤러의 TempData 속성 (사전)에 데이터를 보존 할 수 있습니다.


ViewData :

  • ViewData 사전 유형입니다. public ViewDataDictionary ViewData { get; set; }
  • 컨트롤러에서보기로 데이터를 전달하는 데 사용할 수 있습니다.
  • 현재의 요청 중에 만 삶의 거짓말
  • 문자열을 전달하면 typecast 할 필요가 없습니다.
  • 객체를 전달하는 경우 타입 캐스트해야하지만 그 전에 null이 아닌지 확인해야합니다.
  • 클래스 ControllerBase의 부모 인의 속성Controller

TempData :

  1. TempData내부적으로 사용 TempDataDictionary:public TempDataDictionary TempData { get; set; }
  2. 데이터가 TempDataDictionary객체에 저장되면 :
    • 그것은 그 안에 지속되며 모든 컨트롤러의 모든보기 또는 작업에서 읽을 수 있습니다.
    • 한 번만 읽을 수 있습니다. 일단 읽으면 null이됩니다.
    • 세션에 저장되므로 세션 데이터 만료시 손실됩니다.

이 동작은 ASP.NET MVC 2 및 이후 버전의 새로운 기능입니다. 이전 버전의 ASP.NET MVC에서는 TempData다음 요청까지만 의 값을 사용할 수있었습니다.

  1. 읽히거나 세션이 만료되어 어디서나 읽을 수있을 때까지 살아 있습니다.

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>

Just a side note to TempData.
Data in it is stored not stored until the next request, but until the next read operation is called!
See:
TempData won't destroy after second request

참고URL : https://stackoverflow.com/questions/173159/difference-between-viewdata-and-tempdata

반응형