在我的VB.net站點中使用會話變量已經算得很好。我只需要讓我的歡迎消息留在每一頁上。我把代碼和文本框放在我的母版頁中,以允許郵件停留在那裏,但是當我點擊不同的頁面時,帶有用戶名的標籤就消失了。使用會話在每個頁面上顯示的歡迎消息
會話仍然存在,因爲如果會話由於某種原因被銷燬或不可用,我將它設置爲顯示輸入代碼的文本框。
有人能告訴我哪部分代碼不允許用戶會話的First_Name和Last_Name顯示出來嗎?問題出在Page_Load上,但我想我會拋出整個master.vb文件來顯示我目前爲止的所有內容。
Partial Class MasterPage
Inherits System.Web.UI.MasterPage
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim FirstName As String = String.Empty
Dim LastName As String = String.Empty
If Session("IB") Is Nothing Then
IBText.Visible = "True"
IBTextBox.Visible = "True"
IBTextBoxButton.Visible = "True"
Else
Session("First_Name") = FirstName
Session("Last_Name") = LastName
IBText.Visible = "False"
IBTextBox.Visible = "False"
IBTextBoxButton.Visible = "False"
lblIB.Visible = "True"
lblIB.Text = "Welcome, " + Session("First_Name") + " "
+ Session("Last_Name") + "."
End If
End Sub
Protected Sub IBTextBoxButton_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles IBTextBoxButton.Click
Session("IB") = IBTextBox.Text
Dim IB As String = Session("IB")
'Response.Redirect(Request.RawUrl + "&IB=" + Session("IB"))
End Sub
Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As
System.Web.UI.WebControls.ServerValidateEventArgs) Handles
CustomValidator1.ServerValidate
Dim FirstName As String = String.Empty
Dim LastName As String = String.Empty
If GetAccountName(args.Value, FirstName, LastName) Then
Session("First_Name") = FirstName
Session("Last_Name") = LastName
IBText.Visible = "False"
IBTextBox.Visible = "False"
IBTextBoxButton.Visible = "False"
lblIB.Visible = "True"
lblIB.Text = "Welcome, " + Session("First_Name") + " " + Session("Last_Name")
+ "."
args.IsValid = True
Else
args.IsValid = False
End If
End Sub
Private Function GetAccountName(ByVal baccount As String, ByRef FirstName As String,
ByRef LastName As String) As Boolean
Dim sql As String = "select baccount, First_Name, Last_Name" & _
" from IB inner join IB_BUISNESS_INFORMATION ON
(IB.IB_ID = IB_BUISNESS_INFORMATION.IB_ID)" & _
" where baccount = @baccount"
Using conn As New
SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings
("IBConnectionString").ConnectionString)
Using cmd As New SqlCommand(sql, conn)
cmd.Parameters.AddWithValue("@baccount", baccount)
conn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader
If (rdr.Read) Then
FirstName = rdr("First_Name").ToString()
LastName = rdr("Last_Name").ToString()
Return True
Else
Return False
End If
End Using
End Using
End Using
End Function
End Class
+1同樣想法... – gbianchi
由於它的工作! 「False」和False有什麼區別?他們在我的頁面上似乎都以相同的方式工作。 – jlg
@jlg:編輯我的答案。編譯器只是試圖將你的字符串解析爲一個布爾變量。但最好直接告訴他你正在分配一個布爾值。這樣你就可以在編譯時產生異常,而不是在運行時(甚至在生產中)。 –