Сайт 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.