【问题标题】:LinkButton onclick event is not triggering for dynamically created buttons c#LinkBut​​ton onclick 事件不会触发动态创建的按钮 c#
【发布时间】:2017-06-07 09:23:34
【问题描述】:

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

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

    }

deleteDomain_Click 事件未触发。我希望触发点击事件。

【问题讨论】:

标签: c# asp.net


【解决方案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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多