У меня есть текстовое поле, в котором пользователь вводит код, подключенный к их учетной записи. Затем он отобразит приветственное сообщение вместо текстового поля, в котором они ввели свою информацию. Он работал до тех пор, пока я не добавил больше кода для запроса другой базы данных. Это закончилось тем, что испортило мою страницу, и, поскольку я удалил этот код, я, должно быть, что-то забыл, или, может быть, мой код был запутанным для начала ... но теперь мое приветственное сообщение всегда является неправильным именем человека. Фактически, независимо от того, какой код вы вводите, он отображает имя того же человека. У этого человека даже нет кода в базе данных. Я попытался добавить IS NOT NULL
и IS LIKE 'B%'
, чтобы он не показывал имя этого человека, но это не помогает.Сайт VB.NET не отображает правильные данные
Когда я выполняю запросы в SQL Server, я получаю результаты, которые я хочу. Может ли кто-нибудь помочь мне узнать, что не так с моей страницей, которая не позволяет отображать имя? Когда я отлаживаю, GetAccountName показывает, что он захватил правильное имя пользователя и поместил его в переменные сеанса.
Когда он возвращается к пользовательскому валидатору, 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
Я удалил его, и теперь он выглядит отлично. Отображается правильное имя, однако в моем сеансе должно быть что-то не так, потому что это имя не удерживается в сеансе со страницы на страницу. – jlg
Да, посмотрите на свою логику Page_Load. Используйте точку останова, если вам нужно. – N0Alias
Нужно ли добавлять код сеанса на каждую страницу или он должен работать на каждой странице, если я помещаю его на главную страницу? Потому что прямо сейчас у меня есть это на главной странице, и это единственный, на котором он работает. – jlg