Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EventHandler不适用于动态控件_C#_Asp.net_.net - Fatal编程技术网

C# EventHandler不适用于动态控件

C# EventHandler不适用于动态控件,c#,asp.net,.net,C#,Asp.net,.net,我已经提到了。它说在Page\u Init或Page\u Load中添加事件处理程序。我厌倦了遵循代码。但是当我单击动态添加的链接按钮时,事件处理程序不会被触发。这里需要更正什么 注意:动态LinkButton控件是在一些业务验证之后在按钮的单击事件中添加的(业务代码不是为了简洁而提供的) 标记 <form id="form1" runat="server"> <div> <asp:LinkButton ID="lnkTest" runat="server"

我已经提到了。它说在
Page\u Init
Page\u Load
中添加事件处理程序。我厌倦了遵循代码。但是当我单击动态添加的链接按钮时,事件处理程序不会被触发。这里需要更正什么

注意:动态LinkButton控件是在一些业务验证之后在按钮的单击事件中添加的(业务代码不是为了简洁而提供的)

标记

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

必须在Page_Load/Page_Init本身中注册所有必需的动态控件的事件处理程序。一个有效的例子可以在

标记

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


代码隐藏

    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);
        }
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(第IsPostBack页)
{
LinkButton lnk1=新的LinkButton();
lnk1.ID=“D1”;
lnk1.Text=“A”;
//事件处理程序必须在页面加载/页面初始化中注册
lnk1.Click+=新建事件处理程序(LinkButton\u Click);
plhdynamicslinks.Controls.Add(lnk1);
LinkButton lnk2=新的LinkButton();
lnk2.ID=“D2”;
lnk2.Text=“B”;
lnk2.Click+=新建事件处理程序(LinkButton\u Click);
plhdynamicslinks.Controls.Add(lnk2);
LinkButton lnk3=新的LinkButton();
lnk3.ID=“D3”;
lnk3.Text=“C”;
lnk3.Click+=新建事件处理程序(LinkButton\u Click);
plhdynamicslinks.Controls.Add(lnk3);
LinkButton lnk4=新的LinkButton();
lnk4.ID=“D4”;
lnk4.Text=“D”;
lnk4.单击+=新建事件处理程序(链接按钮\u单击);
plhdynamicslinks.Controls.Add(lnk4);
}
}
受保护的无效链接按钮\u单击(对象发送者,事件参数e)
{
PopulateLinksBasedOnCriteria();
LinkButton clickedControl=(LinkButton)发送者;
Response.Write(DateTime.Now.ToString()+“__;”+clickedControl.ID+“单击链接按钮”);
}
受保护的无效btnAdd_单击(对象发送者,事件参数e)
{
PopulateLinksBasedOnCriteria();
}
私有void PopulateLinksBasedOnCriteria()
{
plhdynamicslinks.Controls.Clear();
如果(DateTime.Now.Second<30)
{
LinkButton linkButton1=新的LinkButton();
linkButton1.ID=“D1”;
linkButton1.Text=“1”;
plhdynamicslinks.Controls.Add(linkButton1);
LinkButton linkButton2=新的LinkButton();
linkButton2.ID=“D2”;
linkButton2.Text=“2”;
plhdynamicslinks.Controls.Add(linkButton2);
}
其他的
{
LinkButton linkButton3=新的LinkButton();
linkButton3.ID=“D3”;
linkButton3.Text=“3”;
plhdynamicslinks.Controls.Add(linkButton3);
LinkButton linkButton4=新的LinkButton();
linkButton4.ID=“D4”;
linkButton4.Text=“4”;
plhdynamicslinks.Controls.Add(linkButton4);
}
}

每次回发都必须重新创建动态控件,这是一个关于如何持久化动态控件及其状态的好链接

向动态控件添加javascript
onClick
属性,并设置控件事件所需的隐藏字段值
Onclick
动态网格,将
postback
并获取隐藏字段值。在页面加载中,如果隐藏字段有值,则调用一个方法来执行该作业,并在执行该作业后将其设置为
null

这是什么类型的代码?是否希望在呈现和丢弃页面后启动加载?