LinkBut​​ton onclick事件不会触发动态创建的按钮c#

时间:2017-06-07 09:23:34

标签: c# asp.net

我正在尝试创建另一个按钮的动态LinkButtons的{​​{1}}控件,即页面加载后。例如:我有一个名为Add Controls的按钮,其功能是动态添加链接按钮,并为所有这些动态创建链接按钮附加事件处理程序。但不幸的是,事件并没有被触发。以下是我所处理过的一段代码。

假设OnClick是五个元素的集合。

DomainList.Items

以下是我的页面加载代码。

protected void AddControls_Click(object sender, EventArgs e)
{
    foreach (ListItem item in DomainList.Items)
    {               
        LinkButton deleteDomain = new LinkButton();

        deleteDomain.Text = "Delete";
        deleteDomain.Click += new System.EventHandler(deleteDomain_Click);
        deleteDomain.ClientIDMode = ClientIDMode.Static;
        deleteDomain.CommandArgument = item.Text;
        divEditDomainName.Controls.Add(deleteDomain);

    }
}

void deleteDomain_Click(object sender, EventArgs e)
{
    //Some Code;
}

未触发protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Label lblEvent = this.Master.FindControl("SpEvent") as Label; if (Session["eventname"] != null) { lblEvent.Text = Session["eventname"].ToString() + " " + "<i class='fa fa-angle-down'></i>"; } Image imgEvent = this.Master.FindControl("ImageEvent") as Image; imgEvent.ImageUrl = Convert.ToString(Session["ImageURL"]); lblCreateOrganization.Text = Convert.ToString(Session["eventname"]); BindOrganization(); EditOrganizationID.Attributes.Add("readonly", "readonly"); } } 事件。我希望触发点击事件。

1 个答案:

答案 0 :(得分:1)

当Click事件触发时,将发生回发,以便重新创建并再次附加到事件处理程序。

创建(和重新创建)动态控件的最佳位置是page_load或page_init事件处理程序。

试试这个

    public bool AddControlsClicked
    {
        get
        {
            return Convert.ToBoolean(ViewState["AddControlsClicked"]);
        }
        set
        {
            ViewState["AddControlsClicked"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if(AddControlsClicked)
        {
            for (int i = 0; i < 5; i++)
            {
                LinkButton deleteDomain = new LinkButton();

                deleteDomain.Text = "Delete";
                deleteDomain.Click += new System.EventHandler(deleteDomain_Click);
                //deleteDomain.ClientIDMode = ClientIDMode.Static;
                //deleteDomain.CommandArgument = item.Text;
                divEditDomainName.Controls.Add(deleteDomain);
            }
        }
    }

    void deleteDomain_Click(object sender, EventArgs e)
    {
        //Some Code;
    }

    protected void AddControls_Click(object sender, EventArgs e)
    {
        AddControlsClicked = true;
        Page_Load(sender, e);
    }