Asp.net 无法捕获usercontrol上的按钮onclick事件
自从我想到“如何从usercontrol的按钮点击触发我的事件”以来已经4个小时了,答案很快就出来了:“我可以控制按钮的点击事件并从那里引发我的事件!”经过4个小时的调试和调试,以及更多的调试和页面生命周期,以及更多的调试和更多的断点等等,我转而求助于伟大的STACKOVERFLOW(bows)。所以问题很简单,;为什么我不能捕获放置在usercontrol中的按钮的onclick事件,以便触发我的事件? 至于守则: 以下是ascx: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
<%@ 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页面中(带标签)并在那里处理了绑定,但没有效果。如果这让人困惑,很抱歉。非常感谢!