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);
}
}
每次回发都必须重新创建动态控件,这是一个关于如何持久化动态控件及其状态的好链接 向动态控件添加javascriptonClick
属性,并设置控件事件所需的隐藏字段值Onclick
动态网格,将postback
并获取隐藏字段值。在页面加载中,如果隐藏字段有值,则调用一个方法来执行该作业,并在执行该作业后将其设置为null
。这是什么类型的代码?是否希望在呈现和丢弃页面后启动加载?