0

I'm trying to create LinkButtons controls dynamically OnClick of another button i.e after the page load. For example: I have a button called Add Controls which functionality is to add Link Buttons dynamically, and attach an event handler for all this dynamically create Link Buttons. But unfortunately for me the events are not be triggered. The below is the piece of code that I have worked on.

Assume DomainList.Items is a collection of five elements.

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

The below is my page load 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");
        }

    }

The deleteDomain_Click event is not been triggered. I want the click event should be triggered.

Joy Fernandes
  • 303
  • 3
  • 16

1 Answers1

1

when Click event triggers, post back will occur so they recreated and attached to the event handler again.

The best place to create (and re-create) dynamic controls is in the page_load or page_init event handler.

try this

    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);
    }
Abinash
  • 471
  • 3
  • 13