asp.net-mvc - una - viewbag in view mvc
TempData keep() vs peek() (4)
¿Cuál es la diferencia entre keep () y peek ()?
MSDN dice:
- keep ():
marks the specified key in the dictionary for retention.
- peek ():
returns an object that contains the element that is associated with the specified key, without marking the key for deletion.
Realmente no puedo entender cuál es la diferencia, ¿no mantienen ambos un valor para otra solicitud?
¿No mantienen ambos un valor para otra solicitud?
Sí lo hacen, pero cuando el primero es void
, el segundo vuelve y se 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
}
Acabo de terminar de entender Peek and Keep y inicialmente tuve la misma confusión. La confusión surge porque TempData se comporta de manera diferente bajo diferentes condiciones. Puede ver este video que explica cómo mantener y echar un vistazo con la demostración https://www.facebook.com/video.php?v=689393794478113
Tempdata ayuda a preservar los valores para una sola solicitud y CAN TAMBIÉN conserva los valores para la siguiente solicitud en función de 4 condiciones ”.
Si entendiéramos estos 4 puntos, vería más claridad. A continuación se muestra un diagrama con las 4 condiciones, lea el tercer y cuarto punto que habla sobre Peek and Keep.
Condición 1 (no leída): si establece un "TempData" dentro de su acción y no lo lee en su vista, entonces "TempData" se mantendrá para la próxima solicitud.
Condición 2 (Lectura normal): - Si lee "TempData" normalmente como el código de abajo, no persistirá para la próxima solicitud.
string str = TempData[“MyData”];
Incluso si está mostrando es una lectura normal, como el código a continuación.
@TempData[“MyData”];
Condición 3 (Leer y mantener): - Si lee "TempData" y llama al método "Mantener", se persistirá.
@TempData[“MyData”];
TempData.Keep(“MyData”);
Condición 4 ( Eche un vistazo y lea): - Si lee "TempData" utilizando el método "Peek", persistirá para la siguiente solicitud.
string str = TempData.Peek("Td").ToString();
Referencia: - http://www.codeproject.com/Articles/818493/MVC-Tempdata-Peek-and-Keep-confusion
Cuando se lee un objeto en un TempDataDictionary
, se marcará para su eliminación al final de esa solicitud.
Eso significa que si pones algo en TempData como
TempData["value"] = "someValueForNextRequest";
Y en otra solicitud, acceda a él, el valor estará allí, pero tan pronto como lo lea, el valor se marcará para su eliminación:
//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
Los métodos Peek
and Keep
permiten leer el valor sin marcarlo para borrarlo. Digamos que volvemos a la primera solicitud donde se guardó el valor en TempData.
Con Peek
obtienes el valor sin marcarlo para borrarlo con una sola llamada, consulta 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"];
Con Keep
, especifica una clave que se marcó para eliminar y que desea conservar. Recuperar el objeto y luego guardarlo para borrarlo son 2 llamadas diferentes. Ver 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"];
Puede usar Peek
cuando quiera conservar el valor para otra solicitud. El uso de Keep
cuando se retiene el valor depende de la lógica adicional.
Tienes 2 buenas preguntas sobre cómo funciona TempData here y here
¡Espero eso ayude!
TempData también es un objeto de diccionario que permanece durante el tiempo de una solicitud HTTP. Por lo tanto, se puede usar TempData para mantener los datos entre una acción del controlador y la otra acción del controlador.
TempData se utiliza para comprobar los valores nulos cada vez. TempData contiene dos métodos keep () y peek () para mantener el estado de los datos de una acción del controlador a otras.
Cuando se lee el objeto TempDataDictionary , al final de la solicitud se marca como eliminación del objeto de lectura actual.
El método keep () y peek () se utiliza para leer los datos sin eliminar el objeto de lectura actual.
Puede usar Peek () cuando siempre quiere mantener / evitar el valor para otra solicitud. Puede usar Mantener () cuando prevenir / mantener el valor depende de lógica adicional.
Sobrecarga en TempData.Peek () y TempData.Keep () como se indica a continuación.
TempData.Keep () tiene 2 métodos sobrecargados.
void keep () : amenaza todos los datos que no se eliminaron al completar la solicitud actual.
mantener vacío (clave de cadena) : persistir el elemento específico en TempData con ayuda de nombre.
TempData.Peek () no hay métodos sobrecargados.
- peek de objeto (clave de cadena) : devuelve un objeto que contiene elementos con una clave específica sin hacer que la clave se elimine.
Ejemplo para el tipo de retorno de los métodos TempData.Keep () y TempData.Peek () como se indica a continuación.
public void Keep (clave de cadena) {_retainedKeys.Add (clave); }
objeto público Peek (clave de cadena) {valor del objeto = valores; valor de retorno; }