2012-03-09 4 views
1

У меня есть текстовое поле, в котором пользователь вводит код, подключенный к их учетной записи. Затем он отобразит приветственное сообщение вместо текстового поля, в котором они ввели свою информацию. Он работал до тех пор, пока я не добавил больше кода для запроса другой базы данных. Это закончилось тем, что испортило мою страницу, и, поскольку я удалил этот код, я, должно быть, что-то забыл, или, может быть, мой код был запутанным для начала ... но теперь мое приветственное сообщение всегда является неправильным именем человека. Фактически, независимо от того, какой код вы вводите, он отображает имя того же человека. У этого человека даже нет кода в базе данных. Я попытался добавить 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 

ответ

1

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

Response.Redirect(Request.RawUrl) 
+0

Я удалил его, и теперь он выглядит отлично. Отображается правильное имя, однако в моем сеансе должно быть что-то не так, потому что это имя не удерживается в сеансе со страницы на страницу. – jlg

+0

Да, посмотрите на свою логику Page_Load. Используйте точку останова, если вам нужно. – N0Alias

+0

Нужно ли добавлять код сеанса на каждую страницу или он должен работать на каждой странице, если я помещаю его на главную страницу? Потому что прямо сейчас у меня есть это на главной странице, и это единственный, на котором он работает. – jlg

0

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

+1

Спасибо! Я буду помнить об этом для будущих проектов. :) – jlg

Смежные вопросы