我想在代码后面创建一个方法,该方法创建一个按钮并将其放置在占位符中。我希望这个按钮有一个 Click 事件。
调用“test”方法后按钮放置正确,但未调用单击事件。
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();
}
最佳答案
删除 OnClientClick = "return false;"
是必要的,但不足以使其正常工作。如果您希望触发动态添加按钮上的事件处理程序,则需要每次加载页面时添加此按钮。
一种简单的方法是保存按钮已添加到 ViewState 中的事实,然后在 PageLoad 上检查该事实,并在需要时重新添加按钮。
这是一个适合我的示例(单击时抛出异常)
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!!!");
}
关于c# - 无法调用动态按钮上的 Click 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695367/