2012-03-09 1 views
1

J'ai une zone de texte dans laquelle un utilisateur entre un code qui est connecté à son compte. Il affichera alors un message de bienvenue à la place de la zone de texte où ils ont entré leurs informations. Il travaillait jusqu'à ce que j'ai ajouté plus de code pour interroger une autre base de données. Cela a fini par gâcher ma page et depuis que j'ai supprimé ce code, j'ai dû oublier quelque chose, ou peut-être que mon code était désordonné pour commencer .... mais maintenant mon message de bienvenue est toujours le mauvais nom. En fait, peu importe le code que vous tapez, il affiche le nom de la même personne. Cette personne n'a même pas de code dans la base de données. J'ai essayé d'ajouter IS NOT NULL et IS LIKE 'B%' afin qu'il ne montre pas le nom de cette personne, mais cela n'aide pas.Le site VB.NET n'affiche pas les bonnes données

Lorsque je fais les requêtes dans SQL Server, j'obtiens les résultats que je veux. Quelqu'un peut-il m'aider à trouver ce qui ne va pas avec ma page qui ne permet pas l'affichage du nom? Quand je débogue, GetAccountName montre qu'il a attrapé le nom d'utilisateur correct et l'a mis dans les variables de session. Quand il retourne au validateur personnalisé, lblIB.Text ne reçoit jamais d'informations pour afficher le message de bienvenue, il saisit simplement la première chose dans la base de données, ce qui est toujours faux.

<%@ 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 

Répondre

1

Retirez la ligne de code suivante. Si GetAccountName fonctionne comme vous le dites, cela résoudra votre problème.

Response.Redirect(Request.RawUrl) 
+0

Je l'ai enlevé et il semble bien maintenant. Le nom correct est montré, il doit y avoir quelque chose de mal avec ma session, parce que ce nom n'est pas maintenu dans la session de page en page. – jlg

+0

Oui, regardez votre logique Page_Load. Utilisez un point d'arrêt si vous le devez. – N0Alias

+0

Dois-je ajouter du code de session à chaque page ou est-il censé fonctionner sur chaque page si je la mets sur la page maître? Parce que maintenant je l'ai sur la page maître et c'est le seul sur lequel il travaille. – jlg

0

méthode Utilisez IsPostBack dans votre cas pageload de toutes les pages et fermez toutes les variables de session créées sur chaque page à la fin de votre événement de chargement de la page.

+1

Merci! Je garderai cela à l'esprit pour les futurs projets. :) – jlg

Questions connexes