Keep () et peek () Quelle est la différence?
MSDN dit:
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.
Je ne peux pas vraiment comprendre la différence. Ne gardent-ils pas tous les deux une valeur pour une autre demande?
Lorsqu'un objet dans TempDataDictionary
est lu, il sera marqué pour suppression à la fin de cette demande.
Cela signifie que si vous mettez quelque chose sur TempData comme
TempData["value"] = "someValueForNextRequest";
Et sur une autre demande, vous y accédez, la valeur sera là mais dès que vous la lirez, la valeur sera marquée pour suppression:
//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
Les méthodes Peek
et Keep
vous permettent de lire la valeur sans la marquer pour la suppression. Supposons que nous revenions à la première demande où la valeur a été enregistrée dans TempData.
Avec Peek
vous obtenez la valeur sans la marquer pour la suppression avec un seul appel, voir 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"];
Avec Keep
, vous spécifiez une clé à supprimer que vous souhaitez conserver. La récupération de l'objet et sa sauvegarde ultérieure après la suppression sont deux appels différents. Voir 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"];
Vous pouvez utiliser Peek
lorsque vous souhaitez toujours conserver la valeur d'une autre demande. Utilisez Keep
lorsque la conservation de la valeur dépend d'une logique supplémentaire.
Vous avez 2 bonnes questions sur le fonctionnement de TempData ici et ici
J'espère que ça aide!
Je viens juste de comprendre Peek et Keep et j'ai eu la même confusion au début. La confusion survient parce que TempData se comporte différemment dans des conditions différentes. Vous pouvez regarder cette vidéo qui explique le Keep and Peek avec démonstration https://www.facebook.com/video.php?v=68939379447811
Tempdata aide à préserver les valeurs pour une requête unique et PEUT ÉGALEMENT conserver les valeurs pour la requête suivante en fonction de 4 conditions ” .
Si nous comprenons ces 4 points, vous verriez plus de clarté. Ci-dessous, un diagramme avec les 4 conditions, lisez les troisième et quatrième points qui traitent de Peek et Keep.
Condition 1 (Non lu): - Si vous définissez un "TempData" dans votre action et si vous ne le lisez pas dans votre vue, "TempData" sera persisté pour la prochaine demande.
Condition 2 (lecture normale): - Si vous lisez normalement le “TempData” comme le code ci-dessous, il ne sera pas conservé pour la prochaine requête.
string str = TempData[“MyData”];
Même si vous affichez, c’est une lecture normale comme le code ci-dessous.
@TempData[“MyData”];
Condition 3 (Lire et conserver): - Si vous lisez "TempData" et appelez la méthode "Keep", il sera conservé.
@TempData[“MyData”];
TempData.Keep(“MyData”);
Condition 4 (Peek et Read): - Si vous lisez “TempData” à l'aide de la méthode “Peek”, il persistera pour la requête suivante.
string str = TempData.Peek("Td").ToString();
Référence: - http://www.codeproject.com/Articles/818493/MVC-Tempdata-Peek-and-Keep-confusion
TempData est également un objet dictionnaire qui reste pendant la durée d'une requête HTTP. Ainsi, TempData peut être utilisé pour conserver des données entre une action du contrôleur à l’autre action du contrôleur.
TempData est utilisé pour vérifier les valeurs nulles à chaque fois. TempData contient deux méthodes keep () et peek () permettant de conserver l'état des données d'une action du contrôleur à d'autres.
Lorsque TempDataDictionary, l'objet est lu, à la fin de la demande, marque la suppression de l'objet en cours de lecture.
La méthode keep () et peek () est utilisée pour lire les données sans supprimer l'objet en cours de lecture.
Vous pouvez utiliser Peek () lorsque vous souhaitez toujours conserver/empêcher la valeur d'une autre demande. Vous pouvez utiliser Keep () quand empêcher/maintenir la valeur dépend d'une logique supplémentaire.
Surcharge dans TempData.Peek () & TempData.Keep () comme indiqué ci-dessous.
TempData.Keep () ont 2 méthodes surchargées.
void keep (): Cela menace toutes les données non supprimées à l'achèvement de la demande en cours.
void garder (clé de chaîne): conserver l'élément spécifique dans TempData avec l'aide de name.
TempData.Peek () pas de méthodes surchargées.
Exemple de type de retour des méthodes TempData.Keep () & TempData.Peek (), comme indiqué ci-dessous.
vide public Garder (clé de chaîne) {_retainedKeys.Add (clé); }
objet public Peek (clé de chaîne) {valeur d'objet = valeurs; valeur de retour; }
ne gardent-ils pas tous deux une valeur pour une autre demande?
Oui, oui, mais lorsque le premier est void
, le second retourne et 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
}