IT TIP

TempData keep () 대 peek ()

itqueen 2020. 12. 2. 22:23
반응형

TempData keep () 대 peek ()


keep ()과 peek ()의 ​​차이점은 무엇입니까?

MSDN 말한다 :

  • 유지(): marks the specified key in the dictionary for retention.
  • 몰래 엿보다(): returns an object that contains the element that is associated with the specified key, without marking the key for deletion.

차이점이 무엇인지 알 수 없습니다. 둘 다 다른 요청에 대한 가치를 유지하지 않습니까?


의 객체를 TempDataDictionary읽으면 해당 요청이 끝날 때 삭제 표시됩니다.

즉, TempData에 다음과 같은 것을 넣는 경우

TempData["value"] = "someValueForNextRequest";

그리고 다른 요청에 액세스하면 값이 있지만 읽은 즉시 값이 삭제 표시됩니다.

//second request, read value and is marked for deletion
object value = TempData["value"];

//third request, value is not there as it was deleted at the end of the second request
TempData["value"] == null

PeekKeep방법은 사용자가 삭제를 표시하지 않고 값을 읽을 수 있습니다. 값이 TempData에 저장된 첫 번째 요청으로 돌아 간다고 가정 해 보겠습니다.

함께 Peek단일 호출로 삭제를 표시하지 않고 값을 가져 볼 MSDN :

//second request, PEEK value so it is not deleted at the end of the request
object value = TempData.Peek("value");

//third request, read value and mark it for deletion
object value = TempData["value"];

함께 Keep사용하면 유지하려는 것을 삭제 표시가 된 키를 지정합니다. 객체를 검색하고 나중에 삭제되지 않도록 저장하는 것은 두 가지 다른 호출입니다. msdn 참조

//second request, get value marking it from deletion
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");

//third request, read value and mark it for deletion
object value = TempData["value"];

Peek다른 요청에 대한 값을 항상 유지하려는 경우 사용할 수 있습니다 . Keep추가 논리에 따라 값을 유지할 때 사용합니다 .

TempData가 여기여기 에서 어떻게 작동하는지에 대한 두 가지 좋은 질문이 있습니다.

도움이 되었기를 바랍니다.


방금 Peek와 Keep에 대한 이해를 마치고 처음에는 동일한 혼란을 겪었습니다. TempData가 다른 조건에서 다르게 작동하기 때문에 혼란이 발생합니다. Keep 및 Peek를 설명하는이 비디오를 데모 https://www.facebook.com/video.php?v=689393794478113으로 볼 수 있습니다.

Tempdata는 단일 요청에 대한 값을 보존하는 데 도움이 되며 4 가지 조건 에 따라 다음 요청에 대한 보존 할 수도 있습니다 .

이 4 가지 요점을 이해한다면 더 명확하게 볼 수있을 것입니다. 아래는 4 가지 조건이 모두 포함 된 다이어그램입니다. Peek 및 Keep에 대한 세 번째 및 네 번째 요점을 읽으십시오.

여기에 이미지 설명 입력

조건 1 (읽지 않음) :- 작업 내부에 "TempData"를 설정하고 뷰에서 읽지 않으면 다음 요청에 대해 "TempData"가 유지됩니다.

Condition 2 (Normal Read) :- 아래 코드와 같이 "TempData"를 정상적으로 읽으면 다음 요청시 지속되지 않습니다.

string str = TempData[“MyData”];

표시하는 경우에도 아래 코드와 같이 정상적인 읽기입니다.

@TempData[“MyData”];

Condition 3 (Read and Keep) :- If you read the “TempData” and call the “Keep” method it will be persisted.

@TempData[“MyData”];
TempData.Keep(“MyData”);

Condition 4 ( Peek and Read) :- If you read “TempData” by using the “Peek” method it will persist for the next request.

string str = TempData.Peek("Td").ToString();

Reference :- http://www.codeproject.com/Articles/818493/MVC-Tempdata-Peek-and-Keep-confusion


TempData is also a dictionary object that stays for the time of an HTTP Request. So, TempData can be used to maintain data between one controller action to the other controller action.

TempData is used to check the null values each time. TempData contain two method keep() and peek() for maintain data state from one controller action to others.

When TempDataDictionary object is read, At the end of request marks as deletion to current read object.

The keep() and peek() method is used to read the data without deletion the current read object.

You can use Peek() when you always want to hold/prevent the value for another request. You can use Keep() when prevent/hold the value depends on additional logic.

Overloading in TempData.Peek() & TempData.Keep() as given below.

TempData.Keep() have 2 overloaded methods.

  1. void keep() : That menace all the data not deleted on current request completion.

  2. void keep(string key) : persist the specific item in TempData with help of name.

TempData.Peek() no overloaded methods.

  1. object peek(string key) : return an object that contain items with specific key without making key for deletion.

Example for return type of TempData.Keep() & TempData.Peek() methods as given below.

public void Keep(string key) { _retainedKeys.Add(key); }

public object Peek(string key) { object value = values; return value; }


don't they both keep a value for another request?

Yes they do, but when the first one is void, the second one returns and object:

public void Keep(string key)
{
    _retainedKeys.Add(key); // just adds the key to the collection for retention
}

public object Peek(string key)
{
    object value;
    _data.TryGetValue(key, out value);
    return value; // returns an object without marking it for deletion
}

Keep() method marks the specified key in the dictionary for retention

추가 로직에 따라 값을 방지 / 보류 할 때 Keep ()을 사용할 수 있습니다.

TempData 하나를 읽고 다른 요청을 보류하고 싶을 때 keep 메서드를 사용하면 위의 예와 같이 TempData가 다음 요청에 사용할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/21252888/tempdata-keep-vs-peek

반응형