2009-05-22 22 views
6

Por lo que he leído, la información colocada en TempData estará allí para la solicitud actual y la próxima solicitud (para que pueda pasar información a través de redireccionamientos). El problema es que si busco una acción de controlador que no redirija, la información en TempData seguirá allí para la próxima solicitud. Estoy usando TempData para almacenar mensajes informativos que se muestran al usuario, por lo que ahora recibo los mensajes de la primera pantalla en la segunda pantalla también.ASP.NET MVC: borrar TempData después de ejecutar un método de controlador

¿Hay un buen momento en el ciclo de vida del controlador para borrar TempData una vez que ya no se usa?

Respuesta

7

Use ViewData instead of TempData if you are not redirecting. Nunca debería necesitar borrar TempData manualmente. Si solo lo usa al redirigir, se borrará para usted, automáticamente y en el momento correcto.

+0

Pero, ¿y si mi acción de controlador _es_ redireccionando? No puedo usar ViewData en ese caso porque los mensajes ya no están allí. ¿Hay una manera mejor de tratar con mensajes de visualización como este que almacenarlos en TempData/ViewData? –

+0

Necesita usar ViewData cuando no está redirigiendo y TempData cuando está redirigiendo. En ambos casos, todo lo demás es automático. Para mostrarlo, escriba TempData ["key"] ?? ViewData ["key"] en su vista. –

0

Creo que deberías usar ViewData si no estás usando POST-REDIRECT-GET. Pero si realmente necesita el comportamiento que usted ha descrito anteriormente debe crear su propia TempDataProvider personalizado:

public class YourTempDataProvider : SessionStateTempDataProvider 
{ 
    public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values) 
    { 
     bool redirecting = ... 

     if(redirecting) 
     { 
      base.SaveTempData(controllerContext, values); 
     } 
    } 
} 
+0

¿Y cómo se usa esta clase personalizada? – Alex

0

no me busque un determinado lugar aquí, que no sea un TempDataProvider personalizado. Pero eso es complicado. ¿Qué pasa si quieres el comportamiento habitual en otros controladores? Me gustaría YAGNI esto por ahora y simplemente limpiarlo donde necesita que se elimine. Cuando notes un patrón, puedes subirlo a un lugar común.

Cuestiones relacionadas