2.加到url后面(类似?xxx=yyy&zzz=kkk),缺点是只能传递字符串类型的值,对于我们自定义的对象就不适用了 我研究了一下,忽然想起原来做java的时候有一个本地线程东东,可以往里面放数据,只在本线程内使用,是线程安全的,估计.net也应该有类似的东东吧,查了一下找到了一个叫线程局部存储(TSL: Thread Local Storage)的技术, 写了一点代码,测试了一下,基本满足了我需要的功能(页面之间传递无状态临时数据),以下是我的代码:
创建一个全局常量定义类ConstString.vb ------------------------------------------------------------------------------------ Imports Microsoft.VisualBasic Public Class ConstString Public Const THREAD_CACHE_INFO As String = "THREAD_CACHE_INFO" End Class
然后,在web工程内的Global.asax内加入启动和关闭web时,所需要执行的代码 ------------------------------------------------------------------------------------ <%@ Application Language="VB" %> <script runat="server"> Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) System.Threading.Thread.AllocateNamedDataSlot(ConstString.THREAD_CACHE_INFO) End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) System.Threading.Thread.FreeNamedDataSlot(ConstString.THREAD_CACHE_INFO) End Sub …………略 </script>
Public Class ThreadCache Public Shared Function getAttribute(ByVal name As String) As Object Dim ht As Hashtable = getCache() Return ht.Item(name) End Function Public Shared Sub setAttribute(ByVal name As String, ByVal value As Object) Dim ht As Hashtable = getCache() ht.Add(name, value) End Sub Private Shared Function getCache() As Hashtable Dim slot As LocalDataStoreSlot = Thread.GetNamedDataSlot(ConstString.THREAD_CACHE_INFO) Dim ht As Hashtable = Thread.GetData(slot) If ht Is Nothing Then ht = New Hashtable() Thread.SetData(slot, ht) End If Return ht End Function End Class