【问题标题】:VB.NET site is not displaying the right dataVB.NET 站点未显示正确的数据
【发布时间】:2012-03-09 21:23:43
【问题描述】:

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

【问题讨论】:

    标签: asp.net vb.net session


    【解决方案1】:

    删除以下代码行。如果 GetAccountName 像您所说的那样工作,它将解决您的问题。

    Response.Redirect(Request.RawUrl) 
    

    【讨论】:

    • 我删除了它,现在看起来很好。正在显示正确的名称,但我的会话肯定有问题,因为该名称没有在页面之间的会话中保持。
    • 是的,看看你的 Page_Load 逻辑。必要时使用断点。
    • 我是否需要将会话代码添加到每个页面,或者如果我将其放在母版页上,它是否应该在每个页面上都可以使用?因为现在我在母版页上有它,这是唯一可以使用的。
    • 通过将它放在母版页中,它将适用于所有页面。错误非常明显。密切注意页面加载事件处理程序中的逻辑,您会看到它。
    【解决方案2】:

    在所有页面的pageload 事件中使用IsPostBack 方法,并在页面加载事件结束时关闭在每个页面上创建的所有会话变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多