Сайт VB.NET не отображает правильные данные - PullRequest
1 голос
/ 10 марта 2012

У меня есть текстовое поле, в котором пользователь вводит код, связанный с его учетной записью. Затем он отобразит приветственное сообщение вместо текстового поля, в которое они ввели свою информацию. Раньше он работал до тех пор, пока я не добавил больше кода для запроса другой базы данных. Это закончилось тем, что испортило мою страницу, и, так как я удалил этот код, я, должно быть, что-то забыл, или, возможно, мой код был грязным с самого начала ... но теперь мое приветственное сообщение всегда неверное имя человека. Фактически, независимо от того, какой код вы вводите, он отображает имя одного и того же человека. У этого человека даже нет кода в базе данных. Я попытался добавить IS NOT NULL и IS LIKE 'B%', чтобы не отображалось имя этого человека, но это не помогло.

Когда я делаю запросы в SQL Server, я получаю нужные результаты. Может ли кто-нибудь помочь мне выяснить, что не так с моей страницей, которая не позволяет отображать имя? Когда я отлаживаю, GetAccountName показывает, что он выбрал правильное имя пользователя и поместил его в переменные Session.

Когда он возвращается к пользовательскому валидатору, lblIB.Text никогда не получает информацию для отображения приветственного сообщения, поэтому он просто получает первое в базе данных, что всегда неверно.

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<div id="ib">
    <asp:Label ID="IBText" runat="server" Text="Enter your IB code here:"></asp:Label>
    <asp:TextBox ID="IBTextBox" runat="server"></asp:TextBox>
    <asp:Button ID="IBTextBoxButton" runat="server" Text="Submit" />
    <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="IBTextBox" ForeColor="Red" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
    <asp:Label ID="lblIB" runat="server" Text=""></asp:Label>
 </div><!-- end ib div -->


Imports System.Data
Imports System.Data.SqlClient
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 ib As String = String.Empty
    If Not IsPostBack Then
        If Request.QueryString("IB") IsNot Nothing Then
            ib = Request.QueryString("IB")
            Session("IB") = True
        End If
        If Session("IB") Is Nothing Then
            'show textbox
            IBText.Visible = True
            IBTextBox.Visible = True
            IBTextBoxButton.Visible = True
        Else
            'call function
            GetSessionValues(ib)

        End If
    End If
  End Sub
  Protected Function GetSessionValues(ByVal Code As String) As Boolean
    Dim FirstName As String = String.Empty
    Dim LastName As String = String.Empty

    If GetAccountName(Code, FirstName, LastName) Then
        'set session variables
        Session("First_Name") = FirstName
        Session("Last_Name") = LastName

        'hide textbox
        IBText.Visible = False
        IBTextBox.Visible = False
        IBTextBoxButton.Visible = False
        'args.IsValid = True
        'show welcome message to user if IB code exists in database
        lblIB.Visible = True
        lblIB.Text = "Welcome, " + Session("First_Name") + " " + Session("Last_Name") + "."
        Return True
    Else
        'IB code not found
        'args.IsValid = False
        'shows error message in red
        lblIB.ForeColor = Drawing.Color.Red
        lblIB.Text = "Account not found, please try again."
        Return False
    End If
  End Function

  Private Function GetAccountName(ByVal BAccount As String, ByRef FirstName As String, ByRef LastName As String) As Boolean
    'sql statement for baccount information
    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

  Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
    'declare variables
    Dim FirstName As String = String.Empty
    Dim LastName As String = String.Empty

    If (Not GetSessionValues(args.Value)) Then
        args.IsValid = False
    Else
        args.IsValid = True
    End If

    If GetAccountName(args.Value, FirstName, LastName) Then
        'set session variables
        Session("First_Name") = FirstName
        Session("Last_Name") = LastName

        'hide textbox
        IBText.Visible = False
        IBTextBox.Visible = False
        IBTextBoxButton.Visible = False
        args.IsValid = True
        'show welcome message to user if IB code exists in database
        lblIB.Visible = True
        lblIB.Text = "Welcome, " + Session("First_Name") + " " + Session("Last_Name") + "."
    Else
        'IB code not found
        args.IsValid = False
        'shows error message in red
        lblIB.ForeColor = Drawing.Color.Red
        lblIB.Text = "Account not found, please try again."
    End If
  End Sub

  Protected Sub IBTextBoxButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles IBTextBoxButton.Click
    If Page.IsValid Then
        'declare variables
        Dim LSD As String = String.Empty
        Dim LSC As String = String.Empty
        Session("IB") = IBTextBox.Text
        Dim IB As String = Session("IB")
        'add session variable
        If GetCompanyName(LSD) Then
            Session("LSD") = LSD
        Else
            'no data found
        End If
        'add session variable
        If GetWebsite(LSC) Then
            Session("LSC") = LSC
        Else
            'no data found
        End If
        Response.Redirect(Request.RawUrl)
    End If
  End Sub

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Удалить следующую строку кода.Если GetAccountName работает так, как вы говорите, это решит вашу проблему.

Response.Redirect(Request.RawUrl) 
0 голосов
/ 18 июля 2012

Используйте метод IsPostBack в событии pageload всех страниц и закройте все переменные сеанса, созданные на каждой странице, в конце события загрузки страницы.

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