繁体   English   中英

从vb.net的登录控件中调用函数

[英]Call a function from the Login Control in vb.net

尝试在后面的代码中调用函数,但不起作用-一个建议是使用OnAuthenticate代替OnClick但是这需要重写整个身份验证过程。

<asp:Login ID="Login1" runat="server" OnClick="MyButton"  DestinationPageUrl="~/Receipt.aspx" 
   UserNameLabelText="User Name (From: mysite.com):" 
   PasswordRecoveryText="Forgot User Name or Password?" 
   PasswordRecoveryUrl="~/GetPassword.aspx">
</asp:Login>

VB代码:

Protected Sub MyButton(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim username As String = Login1.UserName
    Dim currentDateTime As DateTime = DateTime.Now.AddHours(3)
    Dim filepath As String = Server.MapPath("~") + "\debug.txt"

    Using writer As StreamWriter = File.AppendText(filepath)
        writer.WriteLine(username)
        writer.WriteLine(currentDateTime)
        writer.WriteLine("")
    End Using
End Sub 

修改后的代码:

Imports System.IO
Imports System.Data

Partial Class Login
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim xUserName As String = User.Identity.Name()
    'UpdateLastLoginDate(xUserName)
End Sub

Protected Sub MyButton(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim username As String = Login1.UserName
    Dim pw As String = Login1.Password
    Dim currentDateTime As DateTime = DateTime.Now.AddHours(3)
    Dim filepath As String = Server.MapPath("~") + "\debug.txt"

    Using writer As StreamWriter = File.AppendText(filepath)
        writer.WriteLine(username)
        writer.WriteLine(pw)
        writer.WriteLine(currentDateTime)
        writer.WriteLine("REMOTE_ADDR: " + Request.Servervariables("REMOTE_ADDR"))
        writer.WriteLine("USER_AGENT: " + Request.Servervariables("HTTP_USER_AGENT"))
        writer.WriteLine("LOCAL_ADDR: " + Request.Servervariables("LOCAL_ADDR"))
        writer.WriteLine("LOGON_USER: " + Request.Servervariables("LOGON_USER"))
        'writer.WriteLine(Request.Servervariables("ALL_HTTP"))
        writer.WriteLine("")
    End Using
End Sub 

Protected Sub Page_PreInit(sender As Object, e As EventArgs)
    WireLoginControlButtonClickEvent(Login1)
End Sub

Private Sub WireLoginControlButtonClickEvent(parent As Control)
    For Each ctrl As Control In parent.Controls
        If TypeOf ctrl Is Button Then
            AddHandler DirectCast(ctrl, Button).Click, Function() (MyFunction())
        ElseIf ctrl.HasControls() Then
            WireLoginControlButtonClickEvent(ctrl)
        End If
    Next
End Sub

Private Function MyFunction() As String
    Response.Write("Function Called")
    Return Nothing
End Function

End Class

试试看:

Protected Sub Page_PreInit(sender As Object, e As EventArgs)
    WireLoginControlButtonClickEvent(Login1)
End Sub

Private Sub WireLoginControlButtonClickEvent(parent As Control)
    For Each ctrl As Control In parent.Controls
        If TypeOf ctrl Is Button Then
            AddHandler DirectCast(ctrl, Button).Click, AddressOf MyFunction
        ElseIf ctrl.HasControls() Then
            WireLoginControlButtonClickEvent(ctrl)
        End If
    Next
End Sub

Private Sub MyFunction(sender As Object, e As EventArgs)
    Response.Write("Function Called")
End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM