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


94

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

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

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

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


나는 대해 뭔가를 추가 할 것이다 TempData여기 stackoverflow.com/a/17199709/2015869
이마 드 알라 자니 강에게

답변:


94

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

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

Ben Scheirman이 여기에서 말했듯 :

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


TempData메서드에서 메서드로 전달되는 간단한 사전보다 훨씬 더 복잡한 (세션) 가능성이 있다는 점에서 매우 큰 차이라고 생각합니다
Matti Virkkunen

29

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


ViewData의 값이 동일한 경우에 유지됩니까?
IsmailS 2011 년

9
@Ismail : 아니요, ViewData는 리디렉션을 통해 데이터를 보존하지 않습니다. 이것이 TempData의 주요 차이점입니다.
Mariano Desanze 2011 년

5

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의 비교를 자세히 참조하십시오.



0

뷰 데이터는 컨트롤러에서 해당 뷰로 데이터를 전달하고자 할 때 사용됩니다. 뷰 데이터는 수명이 매우 짧기 때문에 리디렉션이 발생하면 파괴됩니다. 예 (컨트롤러) :

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>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.