2012-03-09 11 views
1

ユーザーが自分のアカウントに接続しているコードを入力するテキストボックスがあります。その後、情報を入力したテキストボックスの代わりにウェルカムメッセージが表示されます。それは別のデータベースを照会するためのコードを追加するまで機能していました。それは私のページを台無しにしてしまったので、私はそのコードを削除したので、何かを忘れてしまったのでしょうか、あるいはコードが面倒だったかもしれません....しかし、今私の歓迎メッセージは常に間違った人の名前です。実際、どのコードを入力しても、同じ人物の名前が表示されます。この人はデータベースにコードを持っていません。 IS NOT NULLIS 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がどのように動作するかのように動作すると、問題が解決します。あなたのページのloadイベントの最後に各ページに作成されたすべてのページと近いすべてのセッション変数のあなたのpageloadイベントで

Response.Redirect(Request.RawUrl) 
+0

私はそれを削除して、今は正常に見えます。正しい名前が表示されていますが、その名前はセッション間でページ間で保持されていないため、セッションに何か問題があるはずです。 – jlg

+0

うん、あなたのPage_Loadロジックを見てください。必要がある場合はブレークポイントを使用します。 – N0Alias

+0

すべての単一ページにセッションコードを追加する必要がありますか、それともマスタページに置くとすべてのページで動作するはずですか?今はマスターページにあるので、これだけで動作します。 – jlg

0

使用IsPostBack方法。

+1

ありがとう!私は将来のプロジェクトのためにそれを念頭に置いていきます。 :) – jlg

関連する問題