C# Can';t调用动态按钮上的单击事件
我想在代码隐藏中创建一个方法,创建一个按钮并将其放置在占位符中。我希望此按钮具有单击事件 调用“test”方法后,按钮放置正确,但没有调用click事件C# Can';t调用动态按钮上的单击事件,c#,asp.net,button,C#,Asp.net,Button,我想在代码隐藏中创建一个方法,创建一个按钮并将其放置在占位符中。我希望此按钮具有单击事件 调用“test”方法后,按钮放置正确,但没有调用click事件 private void test() { Button linkBtn1 = new Button(); linkBtn1.Text = "linkBtn1"; linkBtn1.OnClientClick = "return false;"; linkBtn1.Clic
private void test()
{
Button linkBtn1 = new Button();
linkBtn1.Text = "linkBtn1";
linkBtn1.OnClientClick = "return false;";
linkBtn1.Click += new EventHandler(linkBtn1_Click);
PagesPlaceHolder.Controls.Add(linkBtn1);
}
void linkBtn1_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}
正如@oleksii指出的,have客户端代码返回false,因此表单永远不会被提交。您需要对此进行注释,然后启动事件处理程序。删除
OnClientClick=“return false;”“
是必要的,但不足以使其正常工作。如果希望触发动态添加按钮上的事件处理程序,则需要在每次加载页面时添加此按钮
一个简单的方法是保存按钮已在ViewState中添加的事实,然后在PageLoad上检查,如果需要,重新添加按钮
下面是一个适合我的示例(单击时抛出异常)
可能是因为这一行
linkBtn1.OnClientClick=“return false;”代码>?当然,它不可能删除OnClientClick,或者如果您想返回一些内容来覆盖其他行为,请返回true以让它单击。
protected void Page_Load(object sender, EventArgs e)
{
//if the button was added previously, add it again
if (ViewState["Added"] != null && (bool)ViewState["Added"])
addButton();
}
//this is the method that adds the button
protected void add_Click(object sender, EventArgs e) {
ViewState["Added"] = true;
addButton();
}
private void addButton() {
Button linkBtn1 = new Button();
linkBtn1.Text = "linkBtn1";
linkBtn1.Click += new EventHandler(linkBtn1_Click);
placeholder1.Controls.Add(linkBtn1);
}
void linkBtn1_Click(object sender, EventArgs e) {
throw new Exception("Button Click Event Triggered. Hello yellow screen!!!");
}