1

好的,在摆弄了 2 天之后,我终于得出结论,我根本不了解事件。

这是我正在尝试做的事情,然后是我的代码:

我的用户控件中有一个按钮,单击后,我想更新 .aspx 页面中的标签。所以我在我的用户控件中创建了一个事件处理程序,我试图在我的页面中监听它。但它根本不起作用,我希望有人能启发我。

用户控制:

Public Custom Event handleButtonEvent As EventHandler

    AddHandler(ByVal value As EventHandler)
        AddHandler btnEventCall.Click, AddressOf Me.doStuff
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler btnEventCall.Click, AddressOf Me.doStuff
    End RemoveHandler

    RaiseEvent (ByVal sender As Object, ByVal e As System.EventArgs)
    End RaiseEvent

End Event

Protected Sub btnEventCall_Click(sender As Object, e As EventArgs) Handles btnEventCall.Click

End Sub

Protected Sub doStuff()
    Response.Write("do stuff")   'dont really need this
End Sub

.aspx 页面:

Protected Sub control_event(ByVal sender As Object, ByVal e As EventArgs) Handles test1a.handleButtonEvent
updateLabel()
End Sub


private sub updateLabel()
    lblUpdate.Text="works!"
end sub

谢谢!

4

2 回答 2

1

我实际上只是在用户控件中实现了这一点,所以也许这会有所帮助。在您的用户控件中,您必须首先注册事件,如下所示:

Public Event DataChange As EventHandler

您可以像这样触发该事件:

RaiseEvent DataChange(Me, New EventArgs)

您将在用户控件中的按钮单击中触发此事件。该事件有两个您要传递的参数。发送者对象(在本例中为它本身)和事件参数。在此示例中,eventArgs 什么都不是,但您可以创建自己的并为其添加值。

现在,在您的 aspx 页面中,您需要附加该事件。构建应用程序时,您应该看到现在有一​​个名为 OnDataChange 的事件。这可以在客户端访问,如下所示:

<mc:myControlrunat="server" ID="myControl1" OnDataChange="myControl_dataChange"  /> 

您可以将其附加在后面的代码中。无论哪种方式,您都需要这样的事件:

 Protected Sub relatedOrders_dataChange(ByVal sender As Object, ByVal e As EventArgs)
   'do something
 end sub

或者

 Protected Sub myControl_dataChange(ByVal sender As Object, ByVal e As EventArgs) handles myControl1.DataChange
   'do something
 end sub

只是不要在服务器端和客户端都附加事件,否则您将看到事件触发两次。

那应该这样做。如果您想让它在没有完整回发的情况下工作,您可能还需要添加一些更新面板,否则,应该很好。概括:

用户控制:

Partial Class myControl
    Inherits System.Web.UI.UserControl
    Public Event DataChange As EventHandler

    'your button click event
    Protected Sub bnt_click(ByVal sender As Object, ByVal e As EventArgs)
      'do stuff
      'now raise the event
       RaiseEvent DataChange(Me, New EventArgs)
    end sub
end class

主页:

<mc:myControlrunat="server" ID="myControl1" OnDataChange="myControl_dataChange"  /> 

Partial Class MyPainPage
    Protected Sub myControl_dataChange(ByVal sender As Object, ByVal e As EventArgs)
 'do stuff 
end sub

end Class
于 2013-02-26T19:17:11.203 回答
1

为了让您开始Events,请参阅下面的这个基本示例。至于在用户控件中执行此操作,请参阅此链接

<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

Sub GreetingBtn_Click(ByVal sender As Object, ByVal e As EventArgs)

    GreetingLabel.Text = "Works!"

End Sub

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Button Example</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <h3>Simple Button Example</h3>

      <asp:Button id="GreetingBtn"
           Text="Click here for greeting..."
           OnClick="GreetingBtn_Click" 
           runat="server"/>
      <br />
      <br />
      <asp:Label ID="GreetingLabel" runat="server" 
                 Visible="true" Text="Hello World!" />
    </div>
    </form>
</body>
</html>

如果要使用代码隐藏,请删除标签之间的所有内容,<script>包括标签并将其放入代码隐藏中:

Protected Sub GreetingBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles GreetingBtn.Click

    GreetingLabel.Text = "Works!"

End Sub
于 2013-02-26T18:38:43.513 回答