Asp.net 无法捕获usercontrol上的按钮onclick事件

Asp.net 无法捕获usercontrol上的按钮onclick事件,asp.net,vb.net,events,user-controls,raiseevent,Asp.net,Vb.net,Events,User Controls,Raiseevent,自从我想到“如何从usercontrol的按钮点击触发我的事件”以来已经4个小时了,答案很快就出来了:“我可以控制按钮的点击事件并从那里引发我的事件!”经过4个小时的调试和调试,以及更多的调试和页面生命周期,以及更多的调试和更多的断点等等,我转而求助于伟大的STACKOVERFLOW(bows)。所以问题很简单,;为什么我不能捕获放置在usercontrol中的按钮的onclick事件,以便触发我的事件? 至于守则: 以下是ascx: <%@ Control Language="vb" A

自从我想到“如何从usercontrol的按钮点击触发我的事件”以来已经4个小时了,答案很快就出来了:“我可以控制按钮的点击事件并从那里引发我的事件!”经过4个小时的调试和调试,以及更多的调试和页面生命周期,以及更多的调试和更多的断点等等,我转而求助于伟大的STACKOVERFLOW(bows)。所以问题很简单,;为什么我不能捕获放置在usercontrol中的按钮的onclick事件,以便触发我的事件? 至于守则: 以下是ascx:

<%@ Control Language="vb" AutoEventWireup="true" CodeBehind="CosmaButton.ascx.vb" Inherits="Comanda.CosmaButton" %>
最后,这里是aspx页面的代码:

Public Class Login1
Inherits System.Web.UI.Page

Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    AddHandler btn.ClickBtn, AddressOf btn_Click
End Sub

Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.ClickBtn

End Sub

End Class
PS做了我的家庭作业,搜索了与此问题相关的所有帖子,发现: 这有点让人沮丧,因为我遵循并重新接纳了这个家伙的帖子,一步一步地走,但效果相同。没有该死的点击事件

编辑1:

添加了用于单击事件的处理程序,因此更新的codebehind版本如下:

Public Class CosmaButton
Inherits System.Web.UI.UserControl

Public Event ClickBtn As EventHandler

Private _title As String = "test"
Private _width As Integer
Private WithEvents _button As New Button

Protected Overrides Sub OnInit(e As EventArgs)
    Me.Controls.Add(_button)

    AddHandler _button.Click, AddressOf _button_Clicked

    MyBase.OnInit(e)
End Sub

Protected Overrides Sub OnLoad(e As EventArgs)
    MyBase.OnLoad(e)
End Sub

Protected Overrides Sub OnPreRender(e As EventArgs)
    _button.CssClass = "styled"
    _button.Text = _title
    _button.Attributes("runat") = "server"
    If _width > 0 Then
        _button.Width = _width
    End If
    MyBase.OnPreRender(e)
End Sub

Protected Sub _button_Clicked(sender As Object, e As EventArgs)
    RaiseEvent ClickBtn(Nothing, Nothing)

End Sub


End Class
还是什么都没有。 之前我添加了很多次处理程序,但在阅读并尝试了上面提到的帖子之后,我向usercontrol添加了一个asp:button标记,但没有成功,之后我发布了这个问题。

如果我理解正确(我对VB.net的了解不是很好),那么您正在动态地向用户控件添加一个按钮。但按钮单击事件从未绑定。若您只是在用户控件上为按钮单击事件添加一个处理程序,那个么事情可能会对您有用

另一条建议是,在使用动态控件时,始终尝试在
page init
preinit
上添加控件,以便您可以利用
viewstate
的优点

编辑1:

我已经为您创建了一个示例,它将帮助您解决这个问题。对于您的用户控件,您可以将按钮放置在designer本身中(以下是我所做的): [用户控件设计器]

<asp:Button runat="server" ID="button" />
Public Event AnEvent()

Protected Sub button_Click(sender As Object, e As EventArgs) Handles button.Click
        RaiseEvent AnEvent()
End Sub
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>

<uc1:WebUserControl1 ID="WebUserControl11" runat="server" OnAnEvent="WebUserControl11_AnEvent"  />
botton_Click是添加到用户控件上的按钮的单击事件。单击此按钮将引发一个事件。现在,这使您的用户可以控制一个完整的包,并拥有自己的事件

剩下要做的唯一一件事就是将此用户控件添加到页面并处理AnEvent。页面上的以下两行添加了用户控件并为我处理了事件: [网页设计器(添加用户控件)]

<asp:Button runat="server" ID="button" />
Public Event AnEvent()

Protected Sub button_Click(sender As Object, e As EventArgs) Handles button.Click
        RaiseEvent AnEvent()
End Sub
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>

<uc1:WebUserControl1 ID="WebUserControl11" runat="server" OnAnEvent="WebUserControl11_AnEvent"  />


希望这有帮助。

沙尚克是对的。这里有人写了类似的东西

显然,您的代码缺少指令

AddHandler _button.Click, AddressOf btn_Click
要为按钮添加处理程序,请单击并删除

Protected Sub _button_Clicked(sender As Object, e As EventArgs)
    RaiseEvent ClickBtn(Nothing, Nothing)
End Sub

我添加了处理程序,但仍然没有添加任何内容,它从未在单击时命中断点。请参阅我的编辑:(您是否尝试过将按钮定义从预渲染移动到页面初始化。移动按钮定义是什么意思?您能给我一个例子吗?如果您想在其他事件上调用page.Controls.Add方法,答案是肯定的…我尝试过初始化预渲染,否则如果您能更具体一些,那将非常有用。非常感谢。)!我已经更新了我的答案。我也测试了代码,它工作得很好。谢谢,我创建了另一个项目,尝试了这个,它工作得很好,但是在我的项目上它仍然不工作:(,但现在我知道问题出在其他地方了。谢谢你的时间和耐心。我祝你一切顺利!我编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。在写这篇文章之前,我添加了处理程序,之后我将按钮添加到我的ascx页面中(带标签)并在那里处理了绑定,但没有效果。如果这让人困惑,很抱歉。非常感谢!