C# 中继器内的多个更新面板触发器

C# 中继器内的多个更新面板触发器,c#,asp.net,triggers,updatepanel,postback,C#,Asp.net,Triggers,Updatepanel,Postback,我在为中继器内的项目创建触发器时遇到一些问题。我想要一个Linkbutton控件从更新面板内触发回发,我在标记中为按钮控件定义了一个触发器,该控件工作正常: <Triggers> <asp:PostBackTrigger ControlID="button" /> </Triggers> 运行此代码时,我收到一个错误: 对于UpdatePanel“UpdatePanel”中的触发器,找不到ID为“ctl00$content$repeater$ctl

我在为中继器内的项目创建触发器时遇到一些问题。我想要一个
Linkbutton
控件从更新面板内触发回发,我在标记中为
按钮
控件定义了一个触发器,该控件工作正常:

<Triggers>
     <asp:PostBackTrigger ControlID="button" />
</Triggers>
运行此代码时,我收到一个错误:

对于UpdatePanel“UpdatePanel”中的触发器,找不到ID为“ctl00$content$repeater$ctl01$linkButton”的控件


如何为我的每个
链接按钮动态添加触发器?

我似乎记得您可以为此使用clientID而不是uniqueID属性。

解决了这个问题。我假设它在我的OP中不起作用的原因是因为中继器控件对更新面板不直接可见

我怀疑将它们移到中继器之外可以解决这个问题,或者调整
FindControl(“linkbutton”)
调用以深入到中继器中进行控制,使用此方法意味着我需要为每个级别创建两个link button对象,这是不需要的

但是,我认为更干净的解决方案是使用scriptmanager将
LinkButton
控件注册为回发控件:

//Create triggers for each 'remove' button
ScriptManager scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager != null)
{
     scriptManager .RegisterPostBackControl(linkbutton);
}

在中继器
ONIMDATABIND
事件中,解决它。

整洁的解决方案是:

    protected void MyRepeater_OnItemCreated(object sender, RepeaterItemEventArgs e)
    {
        //Inside ItemCreatedEvent
        ScriptManager scriptMan = ScriptManager.GetCurrent(this);
        LinkButton btn = e.Item.FindControl("btnSubmit") as LinkButton;
        if (btn != null)
        {
            btn.Click += btnSubmit_Click;
            scriptMan.RegisterAsyncPostBackControl(btn);
        }
    }

我已经试过了,不幸的是,它也会产生同样的结果。如果您感兴趣,我会亲自回答。不过还是要谢谢你
    protected void MyRepeater_OnItemCreated(object sender, RepeaterItemEventArgs e)
    {
        //Inside ItemCreatedEvent
        ScriptManager scriptMan = ScriptManager.GetCurrent(this);
        LinkButton btn = e.Item.FindControl("btnSubmit") as LinkButton;
        if (btn != null)
        {
            btn.Click += btnSubmit_Click;
            scriptMan.RegisterAsyncPostBackControl(btn);
        }
    }