代码之家  ›  专栏  ›  技术社区  ›  Tom

回发时未保留asp.net字符串

  •  0
  • Tom  · 技术社区  · 14 年前

    • 用户通过插入其用户id和密码登录。
    • 然后以登录状态继续访问主页。

    我遇到的问题是,当用户提交电子邮件地址时,用户名和密码没有被保留,因此登录失败。

    Dim userid as String
    Dim password as String
    
    Sub Page_Load(ByVal Sender as Object, ByVal E as EventArgs)
    
    end sub
    
    
    Sub Page_Transfer()
    
    Dim userLookup As mySource.myData = New mySource.myData()
    Dim drSet1 As DataSet = userLookup.xyz("SELECT * FROM OPENQUERY (myDatabase,' SELECT userid, password, email1 FROM userInfo WHERE userid = ''" & userid & "'' AND password = ''" & password & "'' ') ")
    
    If drSet1.Tables(0).Rows.Count < 1 Then
        'Invalid Bond number
        Page.ClientScript.RegisterClientScriptInclude("loginError", "scripts/loginError.js")
    Else
    
            If drSet1.Tables(0).Rows(0).Item("email1") = "" Then
                'No email address
                Page.ClientScript.RegisterClientScriptInclude("emailAddressSubmit", "scripts/emailAddressSubmit.js")
            Else
    
                response.redirect("home.aspx")
    
            End If
    
    End If
    
    End Sub
    
    
    Sub Submit_Email(sender As Object, e As System.Web.UI.ImageClickEventArgs)
    
    'script to add email address to database
    'this is where the strings are losing their values
    
    Page_Transfer()
    
    End Sub
    
    
    Sub Submit_login(sender As Object, e As System.Web.UI.ImageClickEventArgs)
    
    userid = Trim(useridfield.text)
    password = Trim(passwordfield.text)
    
    Page_Transfer()
    
    End Sub
    

    有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Heinzi    14 年前

    问题是,每次回发,页面都会经历一个全新的生命周期。这意味着在一次回发期间设置的页面的任何实例变量都将在下一次回发中丢失。

    1. 从控件(useridfield和passwordfield)中再次读取userid和password。由于ASP.NET控件在回发后使用视图状态保留其值,因此这些控件中的值应仍然有效。

    2. 使用视图状态保存变量的值,即替换

      Dim userid as String 
      Dim password as String 
      

      具有

      Protected Property userid As String
          Get
              Return DirectCast(Me.ViewState("userid"), String)
          End Get
          Set
              Me.ViewState("userid") = value
          End Set
      End Property
      ' same for password
      

      但是,请注意,视图状态是不安全的,也就是说,您的web应用程序的熟练用户可以修改它。因此,在分配邮件地址之前,请确保再次验证userid和password的值(检查DB以查看它们是否匹配)。(顺便说一下,选项1也一样。)

    3. 将值保存到其他位置,例如 Session .