C# 事件处理程序不能与C完美配合使用#

C# 事件处理程序不能与C完美配合使用#,c#,asp.net,event-handling,C#,Asp.net,Event Handling,我动态地创建按钮,每个按钮都可以选择dropdownlist 使用下面的代码,我将向每个按钮添加一个事件处理程序 button.Click += new System.EventHandler(button_Click); PlaceHolder1.Controls.Add(button); private void button_Click(object sender, EventArgs e) { //Do something... Response.Writ

我动态地创建按钮,每个按钮都可以选择dropdownlist

使用下面的代码,我将向每个按钮添加一个事件处理程序

 button.Click += new System.EventHandler(button_Click);

 PlaceHolder1.Controls.Add(button);

 private void button_Click(object sender, EventArgs e)
 {
     //Do something...
     Response.Write("hello");
 }
但不幸的是,它没有触发该事件,并给出如下错误

按钮\u Click“Index.button\u 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);
    }
}
protectedvoid DropDownList1\u SelectedIndexChanged1(对象发送方,事件参数e)
{
RegisterStartupScript(this,typeof(Page),“Close”,“javascript:OpenPopUp1();”,true);
如果(会话[“筛选器”]==DropDownList1.SelectedValue)
{
}
其他的
{
如果(会话[“筛选器”]=“”)
{
会话[“筛选器”]=DropDownList1.SelectedValue+“:”;
}
其他的
{
会话[“筛选器”]=DropDownList1.SelectedValue+“:”+会话[“筛选器”];
}
}
字符串asd=Session[“filter”].ToString();
字符串[]split=asd.split(“:”);
DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);
对于(int i=0;ibutton.Click+=新建系统.EventHandler(按钮单击);
占位符1.控件.添加(按钮);
}
}

上面显示了dropdownselected index的全部代码。

按钮。单击+=新建System.EventHandler(按钮单击);
 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.控件.添加(按钮);
}//很难说你在追求什么,因为这里有很多问题。由于动态生成的按钮是在下拉列表的SelectedIndexChanged事件处理程序中创建的,因此在下一次回发时,这些按钮不存在,它们的事件绑定也不存在。这意味着它们可以显示在页面上,但单击它们不会做任何事情。
其次,由于您将SelectedValue存储到会话中,然后使用该值设置按钮ID,因此如果用户返回页面,您将创建具有重复ID的按钮。(我注意到,一旦选中,您将删除列表项,但如果用户刷新页面,列表项将返回,而会话对象将保持填充状态。)
最后一个奇怪之处是,我无法找到您的特定异常正在处理的位置,也无法复制它。您要针对哪个版本的.NET进行编程?您是否在代码隐藏的任何位置调用按钮单击事件?
现在,我提供了以下修复(或至少改进):

受保护的无效页\u Init(对象发送方,事件参数e)
{
CreateButtons();
}
受保护的void DropDownList1\u SelectedIndexChanged(对象发送方,事件参数e)
{
RegisterStartupScript(this,typeof(Page),“Close”,“javascript:OpenPopUp1();”,true);
如果(会话[“筛选器”]==DropDownList1.SelectedValue)
{
}
其他的
{
如果(会话[“筛选器”]=“”)
{
会话[“筛选器”]=DropDownList1.SelectedValue+“:”;
}
其他的
{
会话[“筛选器”]=DropDownList1.SelectedValue+“:”+会话[“筛选器”];
}
}
DropDownList1.Items.RemoveAt(DropDownList1.SelectedIndex);
CreateButtons();
}
私有void CreateButtons()
{
占位符1.Controls.Clear();
如果(会话[“筛选器”]!=null)
{
字符串asd=Session[“filter”].ToString();
字符串[]split=asd.split(“:”);
对于(int i=0;ibutton.Click+=新建系统.EventHandler(按钮单击);
占位符1.控件.添加(按钮);
}
}
}
私有无效按钮\u单击(对象发送者,事件参数e)
{
//做点什么。。。
回复。写下(“你好”);
}

您将代码放在哪里?用什么方法?如果是,哪种方法?button.Click+=new System.EventHandler(button\u Click);占位符1.控件.添加(按钮);正在置于选择索引更改方法下请显示完整的方法。我认为您正在使用语法
在其他地方显式调用该方法。单击按钮
,您没有向该方法提供需要提供的参数。。使用括号和提供给它的参数调用该方法,如:-
。单击按钮(,)将按钮移动到类的开头并再次编译。我猜下一个函数会出现错误,或者?我仍然认为您有语法错误-如果您使用Visual studio,请在某些内容下查找红色的扭曲线…好的,我没有主意,但是当我看到这个特定错误时,它总是与我在某处犯的一个打字错误有关。。。那只是我的经验
    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");
    }