我已经提到Error与动态LinkButton的事件处理程序。它说,添加事件处理程序的 Page_Init
或的Page_Load
。我累了以下code。但是,当我点击动态添加的链接按钮的事件处理程序不激发。还有什么需要在这里纠正?
注:动态LinkButton控件添加一个按钮的点击事件的一些业务验证后(业务code不为简洁起见给出)
标记
<表格ID =Form1的=服务器>
< DIV>
< ASP:LinkButton的ID =lnkTest=服务器的OnClick =LinkButton_Click>静态的LinkButton< / ASP:LinkButton的>
< BR />
< ASP:按钮的ID =btnAdd=服务器文本=添加的OnClick =btnAdd_Click/>
< BR />
< ASP:占位符ID =plhDynamicLinks=服务器>< / ASP:占位符>
< / DIV>
< /形式GT;
code背后
保护无效的Page_Load(对象发件人,EventArgs的)
{
的foreach(在plhDynamicLinks.Controls控制CTRL)
{
LinkButton的dynamicButton =(LinkButton的)按Ctrl;
dynamicButton.Click + =新的EventHandler(LinkButton_Click);
}
如果(Page.IsPostBack)
{
}
}
保护无效Page_Init(对象发件人,EventArgs的)
{
INT X = 0;
的foreach(在plhDynamicLinks.Controls控制CTRL)
{
LinkButton的dynamicButton =(LinkButton的)按Ctrl;
dynamicButton.Click + =新的EventHandler(LinkButton_Click);
}
}
保护无效LinkButton_Click(对象发件人,EventArgs的)
{
LinkButton的clickedControl =(LinkButton的)发送;
回复于(clickedControl.ID +链接单击按钮);
}
保护无效btnAdd_Click(对象发件人,EventArgs的)
{
plhDynamicLinks.Controls.Clear();
LinkButton的按钮1 =新的LinkButton();
button1.ID =D1;
button1.Text =1;
plhDynamicLinks.Controls.Add(按钮1);
LinkButton的按钮2 =新的LinkButton();
button2.ID =D2;
button2.Text =2;
plhDynamicLinks.Controls.Add(按钮2);
}
解决方案
这是强制性的登记在Page_Load / Page_Init本身所需的所有动态控件的事件处理程序。一个工作的例子可以看出,在动态控件的事件处理程序的工作
标记
<表格ID =Form1的=服务器>
< DIV>
< ASP:按钮的ID =btnAdd=服务器文本=添加的OnClick =btnAdd_Click/>
< BR />
< ASP:占位符ID =plhDynamicLinks=服务器>< / ASP:占位符>
< / DIV>
< /形式GT;
code背后
保护无效的Page_Load(对象发件人,EventArgs的)
{
如果(Page.IsPostBack)
{
LinkButton的lnk1 =新的LinkButton();
lnk1.ID =D1;
lnk1.Text =A;
//事件处理程序必须在Page_Load / Page_Init注册
lnk1.Click + =新的EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk1);
LinkButton的lnk2 =新的LinkButton();
lnk2.ID =D2;
lnk2.Text =B;
lnk2.Click + =新的EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk2);
LinkButton的lnk3 =新的LinkButton();
lnk3.ID =D3;
lnk3.Text =C;
lnk3.Click + =新的EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk3);
LinkButton的lnk4 =新的LinkButton();
lnk4.ID =D4;
lnk4.Text =D;
lnk4.Click + =新的EventHandler(LinkButton_Click);
plhDynamicLinks.Controls.Add(lnk4);
}
}
保护无效LinkButton_Click(对象发件人,EventArgs的)
{
PopulateLinksBasedOnCriteria();
LinkButton的clickedControl =(LinkButton的)发送;
回复于(DateTime.Now.ToString()+___+ clickedControl.ID +链接单击按钮);
}
保护无效btnAdd_Click(对象发件人,EventArgs的)
{
PopulateLinksBasedOnCriteria();
}
私人无效PopulateLinksBasedOnCriteria()
{
plhDynamicLinks.Controls.Clear();
如果(DateTime.Now.Second小于30)
{
LinkButton的linkButton1 =新的LinkButton();
linkButton1.ID =D1;
linkButton1.Text =1;
plhDynamicLinks.Controls.Add(linkButton1);
LinkButton的linkButton2 =新的LinkButton();
linkButton2.ID =D2;
linkButton2.Text =2;
plhDynamicLinks.Controls.Add(linkButton2);
}
其他
{
LinkButton的linkButton3 =新的LinkButton();
linkButton3.ID =D3;
linkButton3.Text =3;
plhDynamicLinks.Controls.Add(linkButton3);
LinkButton的linkButton4 =新的LinkButton();
linkButton4.ID =D4;
linkButton4.Text =4;
plhDynamicLinks.Controls.Add(linkButton4);
}
}
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);
}
}