Приветственное сообщение для отображения на каждой странице, используя сеанс - PullRequest
0 голосов
/ 12 октября 2011

Использование сессионной переменной на моем сайте 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 Ответ

1 голос
/ 12 октября 2011

Если ваше значение сеанса равно , а не ничего, вы перезаписываете его с помощью String.Empty:

 Dim FirstName As String = String.Empty
 Dim LastName As String = String.Empty
 '..... '
 Session("First_Name") = FirstName
 Session("Last_Name") = LastName

Удалите две последние строки, а также переменные FirstName и LastName потому что они все равно не нужны.

Кроме того, Visible является логическим свойством, а не типом String

IBText.Visible = "False"

Должно быть

IBText.Visible = False

Iрекомендую установить Option Strict On , потому что он менее подвержен ошибкам.

Вероятно, вы получите много исключений.Но, исправив свой код, вы увидите, что означает strong type и сколько компилятор еще интерпретировал ваш код (возможно, неверный, но, вероятно, медленный).Почему бы не сказать ему, что ты хочешь ?!Option Strict Off - это способ, которым Microsoft помогает программистам VB6 перейти на .NET, но этого следует избегать.Кстати, ваш код никогда не будет компилироваться с C #.

Вот еще несколько мыслей на эту тему + Option Explicit: http://www.codinghorror.com/blog/2005/08/option-strict-and-option-explicit-in-vbnet-2005.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...