我正在动态创建每个选择下拉列表的按钮。
使用以下代码,我将为每个按钮添加一个事件处理程序。
button.Click += new System.EventHandler(button_Click);
PlaceHolder1.Controls.Add(button);
private void button_Click(object sender, EventArgs e)
{
//Do something...
Response.Write("hello");
}
但不幸的是,它没有触发该事件,并给我一个错误,如下所示
button_Click'Index.button_Click(object,System.EventArgs)'是一个'方法',在给定的上下文中无效
我该如何处理?
protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, typeof(Page), "Close", "javascript:OpenPopUp1();", true);
if (Session["filter"] == DropDownList1.SelectedValue)
{
}
else
{
if (Session["filter"] == "")
{
Session["filter"] = DropDownList1.SelectedValue + ":";
}
else
{
Session["filter"] = DropDownList1.SelectedValue + ":" + Session["filter"];
}
}
string asd = Session["filter"].ToString();
string[] split = asd.Split(':');
DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);
for (int i = 0; i < split.Count(); i++)
{
string filter = split[i].ToString();
Button button = new Button();
button.Text = split[i].ToString();
button.ID = split[i].ToString();
button.Attributes.Add("onclick", "remove(" + split[i].ToString() + ")");
button.Click += new System.EventHandler(button_Click);
PlaceHolder1.Controls.Add(button);
}
}
以上显示了dropdown-selected index的整个代码。
答案 0 :(得分:0)
button.Click += new System.EventHandler(button_Click);
PlaceHolder1.Controls.Add(button);
} // <-- end your current method with a curly brace
// Now start a new method
private void button_Click(object sender, EventArgs e)
{
//do something...
Response.Write("hello");
}
答案 1 :(得分:0)
很难说你要追求的是什么,因为这里有很多问题。由于动态生成的按钮是在下拉列表的SelectedIndexChanged事件处理程序中创建的,因此它们在下一次回发时不会存在,也不会存在事件绑定。这意味着它们可以显示在页面上,但单击它们将不会执行任何操作。
其次,由于您将SelectedValue存储到Session,然后使用该值设置Button ID,因此如果用户返回页面,您将创建具有重复ID的按钮。 (我注意到您在选择后删除列表项,但如果用户刷新页面,它会返回,而会话对象将保持填充。)
最后一个奇怪的是,我无法找到您的特定异常处理的位置,也无法重现它。您编写的是哪个版本的.NET?您是否在代码隐藏的任何地方调用按钮单击事件?
现在,所有人都说,我提供以下修复(或至少改进):
protected void Page_Init(object sender, EventArgs e)
{
CreateButtons();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, typeof(Page), "Close", "javascript:OpenPopUp1();", true);
if (Session["filter"] == DropDownList1.SelectedValue)
{
}
else
{
if (Session["filter"] == "")
{
Session["filter"] = DropDownList1.SelectedValue + ":";
}
else
{
Session["filter"] = DropDownList1.SelectedValue + ":" + Session["filter"];
}
}
DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);
CreateButtons();
}
private void CreateButtons()
{
PlaceHolder1.Controls.Clear();
if (Session["filter"] != null)
{
string asd = Session["filter"].ToString();
string[] split = asd.Split(':');
for (int i = 0; i < split.Count(); i++)
{
string filter = split[i].ToString();
Button button = new Button();
button.Text = split[i].ToString();
button.ID = split[i].ToString();
button.Attributes.Add("onclick", "remove(" + split[i].ToString() + ")");
button.Click += new System.EventHandler(button_Click);
PlaceHolder1.Controls.Add(button);
}
}
}
private void button_Click(object sender, EventArgs e)
{
//do something...
Response.Write("hello");
}