Asp.net MVC里的TempData是一个整体
var a = TempData["a"];
var alsoA = TempData["a"] ;
//true
Debug.Assert(Object.ReferenceEqual(a, alsoA));
=================
objects within TempData will only be removed till the end of current request, if during which period you havn't set something new/old with the key. Sounds simple, but to me, it's not.
And here is a much simpler model, every piece of data got removed when ever you try go get it:
/// <summary>
/// TempData is a whole, all it's value exits in the whole request life time.
/// So here is Flash, any item will be removed whenever you try to get it, much simpler model.
/// </summary>
public class Flash
{
private readonly HttpSessionState session;
public static Flash Instance
{
get
{
return new Flash(HttpContext.Current);
}
}
private Flash(HttpContext context)
{
session = context.Session;
}
public object this[string key]
{
get
{
var sessionKey = GetSessionKey(key);
var obj = session[sessionKey];
session.Remove(sessionKey);
return obj;
}
set
{
var sessionKey = GetSessionKey(key);
session[sessionKey] = value;
}
}
private static string GetSessionKey(string key)
{
return "_Flash_Data_{0}".Form(key);
}
}