有個網友剛好提到這個問題,小喵於是做了個小小的測試,測試的過程如下:
首先小喵在畫面中安排一個TextBox,一個按鈕,當按鈕按下後,將TextBox中的內容放入Session中
接著在安排另外一個按鈕,希望按下按鈕後,可以從一個類別把他的屬性(Property)取出,這個屬性(Property)的內容是從Session中取得。於是程式碼如下:
首先是畫面安排:Default.aspx
<asp:TextBox ID="txtIn" runat="server"></asp:TextBox> <asp:Button ID="btn1" runat="server" Text="取得資料放入Session" /> <br /> <asp:Button ID="btn2" runat="server" Text="從物件中取得Session放入Label" /> <br /> <asp:Label ID="lbl1" runat="server" Text=""></asp:Label>
接著是撰寫一個類別來處理objTSession.vb
請記得要【Imports System.Web.HttpContext】才能處理唷
Imports Microsoft.VisualBasic
Imports System.Web.HttpContext
Public Class objTSession
Private m_SData As String = Current.Session("txt")
Public ReadOnly Property SData() As String
Get
Return "從Class中讀出的Session:" + m_SData.ToString
End Get
End Property
End Class
接著處理畫面的CodeFile:Default.aspx.vb
Protected Sub btn1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn1.Click
Session("txt") = Me.txtIn.Text
End Sub
Protected Sub btn2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn2.Click
Dim ots As New objTSession
Me.lbl1.Text = ots.SData
End Sub
測試結果,當輸入TextBox後將輸入的文字放入Session
然後在Class中確實可以把Session中的內容取出,透過Property傳出,並顯示在畫面上。
不過在細想一下,如果一開始就去按第二個按鈕,這時候Session是空的,那會發生什麼事呢??
發生了【並未將物件參考設定為物件的執行個體】的錯誤訊息
這原因是因為直接按第二顆按鈕時,Session是不存在的
因此要修改一下Class的內容如下,希望當Session不存在的時候,就放入空字串
修改後的Class【objTSession.vb】
Imports Microsoft.VisualBasic
Imports System.Web.HttpContext
Public Class objTSession
Private m_SData As String
Public ReadOnly Property SData() As String
Get
Return "從Class中讀出的Session:" + m_SData
End Get
End Property
Public Sub New()
If Current.Session("txt") IsNot Nothing Then
m_SData = Current.Session("txt").ToString
Else
m_SData = ""
End If
End Sub
End Class
我們在New的時候,來處理這樣的動作,判斷Session是否是Nothing,如果有東西就把東西放入,如果是Nothing的話,就給空字串。
這樣運作起來就不會有問題囉
^_^