事件处理程序是不工作的动态控制事件、程序、动态、工作

2023-09-03 07:53:05 作者:执念i

我已经提到Error与动态LinkBut​​ton的事件处理程序。它说,添加事件处理程序的 Page_Init 的Page_Load 。我累了以下code。但是,当我点击动态添加的链接按钮的事件处理程序不激发。还有什么需要在这里纠正?

注:动态LinkBut​​ton控件添加一个按钮的点击事件的一些业务验证后(业务code不为简洁起见给出)

标记

 <表格ID =Form1的=服务器>
< D​​IV>
    < ASP:LinkBut​​ton的ID =lnkTest=服务器的OnClick =LinkBut​​ton_Click>静态的LinkBut​​ton< / ASP:LinkBut​​ton的>
    < BR />
    < ASP:按钮的ID =btnAdd=服务器文本=添加的OnClick =btnAdd_Click/>
    < BR />
    < ASP:占位符ID =plhDynamicLinks=服务器>< / ASP:占位符>
< / DIV>
< /形式GT;
 

code背后

 保护无效的Page_Load(对象发件人,EventArgs的)
    {

        的foreach(在plhDynamicLinks.Controls控制CTRL)
        {
            LinkBut​​ton的dynamicButton =(LinkBut​​ton的)按Ctrl;
            dynamicButton.Click + =新的EventHandler(LinkBut​​ton_Click);
        }

        如果(Page.IsPostBack)
        {

        }
    }

    保护无效Page_Init(对象发件人,EventArgs的)
    {
        INT X = 0;

        的foreach(在plhDynamicLinks.Controls控制CTRL)
        {
            LinkBut​​ton的dynamicButton =(LinkBut​​ton的)按Ctrl;
            dynamicButton.Click + =新的EventHandler(LinkBut​​ton_Click);
        }
    }

    保护无效LinkBut​​ton_Click(对象发件人,EventArgs的)
    {
        LinkBut​​ton的clickedControl =(LinkBut​​ton的)发送;
        回复于(clickedControl.ID +链接单击按钮);
    }

    保护无效btnAdd_Click(对象发件人,EventArgs的)
    {
        plhDynamicLinks.Controls.Clear();

        LinkBut​​ton的按钮1 =新的LinkBut​​ton();
        button1.ID =D1;
        button1.Text =1;
        plhDynamicLinks.Controls.Add(按钮1);

        LinkBut​​ton的按钮2 =新的LinkBut​​ton();
        button2.ID =D2;
        button2.Text =2;
        plhDynamicLinks.Controls.Add(按钮2);
    }
 

解决方案

这是强制性的登记在Page_Load / Page_Init本身所需的所有动态控件的事件处理程序。一个工作的例子可以看出,在动态控件的事件处理程序的工作

标记

 <表格ID =Form1的=服务器>
< D​​IV>
    < ASP:按钮的ID =btnAdd=服务器文本=添加的OnClick =btnAdd_Click/>
    < BR />
    < ASP:占位符ID =plhDynamicLinks=服务器>< / ASP:占位符>
< / DIV>
< /形式GT;
 
事件管理CRM系统是活动策划工作的必要工具

code背后

 保护无效的Page_Load(对象发件人,EventArgs的)
    {

        如果(Page.IsPostBack)
        {
            LinkBut​​ton的lnk1 =新的LinkBut​​ton();
            lnk1.ID =D1;
            lnk1.Text =A;
            //事件处理程序必须在Page_Load / Page_Init注册
            lnk1.Click + =新的EventHandler(LinkBut​​ton_Click);
            plhDynamicLinks.Controls.Add(lnk1);

            LinkBut​​ton的lnk2 =新的LinkBut​​ton();
            lnk2.ID =D2;
            lnk2.Text =B;
            lnk2.Click + =新的EventHandler(LinkBut​​ton_Click);
            plhDynamicLinks.Controls.Add(lnk2);

            LinkBut​​ton的lnk3 =新的LinkBut​​ton();
            lnk3.ID =D3;
            lnk3.Text =C;
            lnk3.Click + =新的EventHandler(LinkBut​​ton_Click);
            plhDynamicLinks.Controls.Add(lnk3);

            LinkBut​​ton的lnk4 =新的LinkBut​​ton();
            lnk4.ID =D4;
            lnk4.Text =D;
            lnk4.Click + =新的EventHandler(LinkBut​​ton_Click);
            plhDynamicLinks.Controls.Add(lnk4);

        }
    }

    保护无效LinkBut​​ton_Click(对象发件人,EventArgs的)
    {
        PopulateLinksBasedOnCriteria();
        LinkBut​​ton的clickedControl =(LinkBut​​ton的)发送;
        回复于(DateTime.Now.ToString()+___+ clickedControl.ID +链接单击按钮);
    }

    保护无效btnAdd_Click(对象发件人,EventArgs的)
    {
        PopulateLinksBasedOnCriteria();
    }

    私人无效PopulateLinksBasedOnCriteria()
    {
        plhDynamicLinks.Controls.Clear();

        如果(DateTime.Now.Second小于30)
        {
            LinkBut​​ton的linkBut​​ton1 =新的LinkBut​​ton();
            linkBut​​ton1.ID =D1;
            linkBut​​ton1.Text =1;
            plhDynamicLinks.Controls.Add(linkBut​​ton1);

            LinkBut​​ton的linkBut​​ton2 =新的LinkBut​​ton();
            linkBut​​ton2.ID =D2;
            linkBut​​ton2.Text =2;
            plhDynamicLinks.Controls.Add(linkBut​​ton2);
        }
        其他
        {
            LinkBut​​ton的linkBut​​ton3 =新的LinkBut​​ton();
            linkBut​​ton3.ID =D3;
            linkBut​​ton3.Text =3;
            plhDynamicLinks.Controls.Add(linkBut​​ton3);

            LinkBut​​ton的linkBut​​ton4 =新的LinkBut​​ton();
            linkBut​​ton4.ID =D4;
            linkBut​​ton4.Text =4;
            plhDynamicLinks.Controls.Add(linkBut​​ton4);
        }
    }
 

I have referred Error with the event handlers of dynamic linkbutton . It says to add event handlers in Page_Init or Page_Load. I tired following code. But the event handler is not fired when I click on the dynamic added link buttons. What need to be corrected here?

Note: The dynamic LinkButton controls are added in the click event of a button after some business validations (the business code is not given for brevity)

Markup

<form id="form1" runat="server">
<div>
    <asp:LinkButton ID="lnkTest" runat="server" OnClick="LinkButton_Click">Static LinkButton</asp:LinkButton>
    <br />
    <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />
    <br />
    <asp:PlaceHolder ID="plhDynamicLinks" runat="server"></asp:PlaceHolder>
</div>
</form>

Code Behind

    protected void Page_Load(object sender, EventArgs e)
    {

        foreach (Control ctrl in plhDynamicLinks.Controls)
        {
            LinkButton dynamicButton = (LinkButton)ctrl;
            dynamicButton.Click += new EventHandler(LinkButton_Click);
        }

        if (Page.IsPostBack)
        {

        }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        int x = 0;

        foreach (Control ctrl in plhDynamicLinks.Controls)
        {
            LinkButton dynamicButton = (LinkButton)ctrl;
            dynamicButton.Click += new EventHandler(LinkButton_Click);
        }
    }

    protected void LinkButton_Click(object sender, EventArgs e)
    {
        LinkButton clickedControl = (LinkButton)sender;
        Response.Write(clickedControl.ID +" Link Button Clicked");
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        plhDynamicLinks.Controls.Clear();

        LinkButton button1 = new LinkButton();
        button1.ID = "D1";
        button1.Text = "1";
        plhDynamicLinks.Controls.Add(button1);

        LinkButton button2 = new LinkButton();
        button2.ID = "D2";
        button2.Text = "2";
        plhDynamicLinks.Controls.Add(button2);
    }

解决方案

It is mandatory to register all the required dynamic controls’ event handlers in the Page_Load/ Page_Init itself. One working example can be seen at Dynamic Control’s Event Handler’s Working

MarkUp

<form id="form1" runat="server">
<div>
    <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="btnAdd_Click" />
    <br />
    <asp:PlaceHolder ID="plhDynamicLinks" runat="server"></asp:PlaceHolder>
</div>
</form>

CODE BEHIND

    protected void Page_Load(object sender, EventArgs e)
    {

        if (Page.IsPostBack)
        {
            LinkButton lnk1 = new LinkButton();
            lnk1.ID = "D1";
            lnk1.Text = "A";
            //Event handler must be registered in the Page_Load/Page_Init
            lnk1.Click += new EventHandler(LinkButton_Click);
            plhDynamicLinks.Controls.Add(lnk1);

            LinkButton lnk2 = new LinkButton();
            lnk2.ID = "D2";
            lnk2.Text = "B";
            lnk2.Click += new EventHandler(LinkButton_Click);
            plhDynamicLinks.Controls.Add(lnk2);

            LinkButton lnk3 = new LinkButton();
            lnk3.ID = "D3";
            lnk3.Text = "C";
            lnk3.Click += new EventHandler(LinkButton_Click);
            plhDynamicLinks.Controls.Add(lnk3);

            LinkButton lnk4 = new LinkButton();
            lnk4.ID = "D4";
            lnk4.Text = "D";
            lnk4.Click += new EventHandler(LinkButton_Click);
            plhDynamicLinks.Controls.Add(lnk4);

        }
    }

    protected void LinkButton_Click(object sender, EventArgs e)
    {
        PopulateLinksBasedOnCriteria();
        LinkButton clickedControl = (LinkButton)sender;
        Response.Write(DateTime.Now.ToString()+"___"+ clickedControl.ID + " Link Button Clicked" );
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        PopulateLinksBasedOnCriteria();
    }

    private void PopulateLinksBasedOnCriteria()
    {
        plhDynamicLinks.Controls.Clear();

        if (DateTime.Now.Second < 30)
        {
            LinkButton linkButton1 = new LinkButton();
            linkButton1.ID = "D1";
            linkButton1.Text = "1";
            plhDynamicLinks.Controls.Add(linkButton1);

            LinkButton linkButton2 = new LinkButton();
            linkButton2.ID = "D2";
            linkButton2.Text = "2";
            plhDynamicLinks.Controls.Add(linkButton2);
        }
        else
        {
            LinkButton linkButton3 = new LinkButton();
            linkButton3.ID = "D3";
            linkButton3.Text = "3";
            plhDynamicLinks.Controls.Add(linkButton3);

            LinkButton linkButton4 = new LinkButton();
            linkButton4.ID = "D4";
            linkButton4.Text = "4";
            plhDynamicLinks.Controls.Add(linkButton4);
        }
    }

 
精彩推荐
图片推荐