Сайт VB.NET не отображает правильные данные

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

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

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

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<div id="ib">
 
 
 <asp:button id="IBTextBoxButton" runat="server" text="Submit">
 
 
 </asp:button></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 ответа

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

Response.Redirect(Request.RawUrl)


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

licensed under cc by-sa 3.0 with attribution.