未调用动态生成的按钮单击
本文关键字:按钮 单击 调用 动态 | 更新日期: 2023-09-27 18:29:21
我在动态生成按钮时关联了按钮ID,并创建了一个按钮事件处理程序,如下所示:
btn.Click += new EventHandler(btn_Click);
按钮点击事件:
protected void btn_Click(object sender,EventArgs e)
{
Button b = new Button();
b = (Button)sender;
string i = b.ID.Substring(b.ID.Length - 1, 1);
int j1 =Convert.ToInt32(i);
id1 = to[j1];
Page.ClientScript.RegisterClientScriptBlock(Type.GetType("System.String"),
"addScript", "PassValues('" + id1 + "')", true);
ScriptManager.RegisterStartupScript(this, this.GetType(),
"sendMessage", "javascript:sendMessage(); ", true);
}
然而,这个事件没有被调用,我已经把我所有的控件都放在了UpdatePanel 中
编辑:发生的事情是点击按钮,不知何故调用了Page.Load
上的一个函数
protected void getEntriesRight()
{
j = (int)Session["j"];
int n1 = j + 3;
for (; j <= n1; j++)
{
if (j < fr.data.Length)
{
HtmlGenericControl listItem = new HtmlGenericControl("li");
HtmlGenericControl a1 = new HtmlGenericControl("a");
Label anchor = new Label();
Image im = new Image();
btn = new Button();
im.ImageUrl = fr.data[j].pic_square;
im.Height = 45;
im.Width = 47;
btn.CssClass = "btn-add";
btn.Text = "Invite";
to[j] = fr.data[j].uid;
btn.ID = "btn" + j;
a1.Attributes.Add("href", "#");
anchor.Text = fr.data[j].name;
a1.Controls.Add(btn);
a1.Controls.Add(im);
a1.Controls.Add(anchor);
listItem.Controls.Add(a1);
list.Controls.Add(listItem);
btn.Click += new EventHandler(btn_Click);
}
}
Session["j"] = j;
}
救命!
每次回发时都必须重新创建动态生成的控件,以便激发它们的事件。这是在.NET中以编程方式生成控件时最常见的问题之一,如果你能找到解决方法,这是不鼓励的
例如,如果有一个按钮只应在单击另一个按钮时出现,请将该按钮从页面中开始,并使用Visible
属性控制是否显示该按钮。
关于您的编辑。每一个返回到服务器的帖子,即使是在UpdatePanel
中,也将调用Page_Load
。如果您想检测请求是否来自UpdatePanel
,那么在调用函数之前需要检查!Page.IsAsync
。