【发布时间】:2012-03-09 21:23:43
【问题描述】:
我有一个文本框,用户可以在其中输入与其帐户相关联的代码。然后它将显示一条欢迎消息来代替他们输入信息的文本框。在我为它添加更多代码以查询另一个数据库之前,它一直可以正常工作。这最终弄乱了我的页面,因为我已经删除了该代码,我一定忘记了一些东西,或者我的代码一开始就很乱......但是现在我的欢迎信息总是错误的人的名字。事实上,无论您输入什么代码,它都会显示同一个人的姓名。这个人在数据库中甚至没有代码。我尝试添加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
【问题讨论】: