ASP.NET - 添加事件处理程序的LinkBut​​ton直放站内的RenderContent通话 [英] ASP.NET - Add Event Handler to LinkButton inside of Repeater in a RenderContent call

查看:204
本文介绍了ASP.NET - 添加事件处理程序的LinkBut​​ton直放站内的RenderContent通话的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有它加载一个自定义的用户控件在SharePoint的WebPart。用户控件包含一个中继器又包含几个LinkBut​​tons。

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 - 添加事件处理程序的LinkBut​​ton直放站内的RenderContent通话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆