事件处理程序无法与C#完美配合



我正在动态创建按钮,每次选择一个下拉列表。

使用以下代码,我将为每个按钮添加一个事件处理程序。

 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);
    }
}

上面显示了下拉选择索引的整个代码。

 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"); 
    } 

很难说你要追求什么,因为这里有很多问题。由于动态生成的按钮是在下拉列表的SelectedIndexChanged事件处理程序中创建的,因此在下次回发时,它们将不存在,其事件绑定也不存在。这意味着它们可以显示在页面上,但单击它们不会有任何作用。
其次,由于您将SelectedValue存储到Session,然后使用该值来设置按钮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");
    }

相关内容

  • 没有找到相关文章

最新更新