ASP.NET - 添加事件处理程序的LinkButton直放站内的RenderContent通话 [英] ASP.NET - Add Event Handler to LinkButton inside of Repeater in a RenderContent call
问题描述
我有它加载一个自定义的用户控件在SharePoint的WebPart。用户控件包含一个中继器又包含几个LinkButtons。
I've got a Sharepoint WebPart which loads a custom User Control. The user control contains a Repeater which in turn contains several LinkButtons.
在RenderContent通话中的WebPart我有一些代码,添加事件处理程序:
In the RenderContent call in the Webpart I've got some code to add event handlers:
ArrayList nextPages = new ArrayList();
//populate nextPages ....
AfterPageRepeater.DataSource = nextPages;
AfterPageRepeater.DataBind();
foreach (Control oRepeaterControl in AfterPageRepeater.Controls)
{
if (oRepeaterControl is RepeaterItem)
{
if (oRepeaterControl.HasControls())
{
foreach (Control oControl in oRepeaterControl.Controls)
{
if (oControl is LinkButton)
{
((LinkButton)oControl).Click += new EventHandler(PageNavigateButton_Click);
}
}
}
}
}
功能PageNavigateButton_Click从未但是调用。我可以看到它被添加在不过调试事件处理程序。
The function PageNavigateButton_Click is never called however. I can see it being added as an event handler in the debugger however.
任何想法?我难倒如何做到这一点。
Any ideas? I'm stumped how to do this.
推荐答案
到时候RenderContent()被调用,所有注册的事件处理程序已被调用的框架。您需要添加事件处理程序在前面的方法,像的OnLoad():
By the time RenderContent() is called, all the registered event handlers have been called by the framework. You need to add the event handlers in an earlier method, like OnLoad():
protected override void OnLoad(EventArge e)
{ base.OnLoad(e);
EnsureChildControls();
var linkButtons = from c in AfterPageRepeater.Controls
.OfType<RepeaterItem>()
where c.HasControls()
select c into ris
from lb in ris.OfType<LinkButton>()
select lb;
foreach(var linkButton in linkButtons)
{ linkButton.Click += PageNavigateButton_Click
}
}
这篇关于ASP.NET - 添加事件处理程序的LinkButton直放站内的RenderContent通话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!