深入分析ASP.NET Mvc 1.0 – 2
ssionStateTempDataProvider类中的LoadTempData(…)方法:
SessionStateTempDataProvider类中定义了一个常量,用它来作为保存在Session中 TempData对象的Key。
在LoadTempData(…)方法中,首先在Session中查找与key相对应的 Dictionary<string, object>对象,如果Session中存在这个对象,那么就清除 Session中的这个键值对并返回找到的 Dictionary<string, object>对象,否则创 建一个新的Dictionary<string, object>对象并返回。 这里的重点就是httpContext.Session.Remove(TempDataSessionStateKey) 方法,这 也是TempData的特点,即同一个TempData只能被传递一次。当在Session中找到TempData 后立即将它从Session中清除掉,下一次执行LoadTempData(…)方法时绝不会再找到同一 个TempData。 再次说明:只要将一个键值对放入到TempData中,不论是同一个Controller中的不同 Action,还是不同Controller中的不同Action都可以接收到这个TempData,但是仅此一次 ,当程序再次提交回服务端后是绝不可能再获得同样的值的TempData对象,因为它已经在 Session中被清除掉。 2. TempData.Save(ControllerContext, TempDataProvider) 这是整个Controller.Execute(…)生命周期中最后一个操作,它的作用是保存新的 TempData到HttpContext.Base.Session中。Save方法的具体代码:
上面提到过_initialKeys和_modifiedKeys的重要性,它们的作用在这里将体现出来, _initialKeys: 保存在Action执行之前TempData中的全部Key值,如果在action执行过 程中有新的键值对插入到TempData中,对_initialKeys对象中的值不会有任何影响。 _modifiedKeys: 在Action执行过程中,如果有新 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |