【问题标题】:UserControl events in webformWebform 中的 UserControl 事件
【发布时间】:2023-03-13 00:56:01
【问题描述】:

我有一个包含 3 个按钮和 7 个文本框的用户控件。我正在使用 LoadControl 在我的网络表单中动态调用该用户控件。

但我的问题是

1.如何知道我的页面上点击了哪个按钮(用户控件)?

2.如何引发这些事件?

谢谢 卡维莎

【问题讨论】:

  • 解释问题2,你想要一个代码示例,如果是,用什么语言(C#或VB)。

标签: .net asp.net


【解决方案1】:

在您的用户控件中创建事件并在单击按钮时触发它。因此,您可以从主页管理此事件。

更多信息请关注Easily Raise Events From ASP.NET ASCX User Controls

【讨论】:

    【解决方案2】:

    在您的用户控件 (WebUserControl1.ascx) 中,您可能有一个带有点击处理程序的 Button1,其行为如下:

    Event Button1Click(ByVal button As Button)
    
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
      RaiseEvent Button1Click(sender)
    End Sub
    

    然后您可以像这样在父控件中动态地将 EventHandler 附加到 this:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim buttonControl As WebUserControl1 = LoadControl("WebUserControl1.ascx")
        AddHandler buttonControl.Button1Click, AddressOf ControlEventHandler
    End Sub
    
    Private Sub ControlEventHandler(ByVal ctl As Control)
        'We now have access to this control's properties
    End Sub
    

    【讨论】:

      【解决方案3】:

      您可以在自己的代码隐藏文件中处理用户控件上的控件事件,并在用户控件上引发事件,这些事件又可以由页面的代码隐藏文件处理。

      【讨论】:

        【解决方案4】:

        最好的办法是让用户控件将控件封装在其中,然后引发有意义的事件。例如,我编写了一个日期选择器用户控件,它有一个 RadioButtonList 可以在“过去 12 个月”、“年初至今”或“自定义日期”以及开始日期和结束日期文本框之间进行选择。我的用户控件公开了一个 DateChanged 事件,如果进行了新的单选按钮选择,或者进行了“自定义”选择并且输入日期发生了更改,则会引发该事件。

        这样,控件的用户不需要知道控件的复杂实现。它只是订阅 DateChanged 事件。

        【讨论】:

        • 我会说将 SelectedDate 公开为属性而不是引发事件会更容易。更少的代码
        • 确实如此,只是日期选择发生变化时需要重新查询数据。
        猜你喜欢
        • 2015-09-30
        • 2015-11-06
        • 1970-01-01
        • 1970-01-01
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 2014-10-10
        • 1970-01-01
        相关资源
        最近更新 更多