转发器内部有多个更新面板触发器

时间:2013-06-04 10:44:59

标签: c# asp.net triggers updatepanel postback

我在为转发器内的项目创建触发器时遇到了一些麻烦。我想要一个Linkbutton控件来从更新面板中触发回发,我在标记中为Button控件定义了一个触发器,该工具正常工作:

<Triggers>
     <asp:PostBackTrigger ControlID="button" />
</Triggers>

但是,我不能为LinkButton执行此操作,因为它们是动态创建的,只有解决方案是为我的转发器数据绑定事件中的每个按钮添加触发器,如下所示:

//Inside repeater itemdatabound...
var trigger = new PostBackTrigger();
trigger.ControlID = linkButton.UniqueID;
updatepanel.Triggers.Add(trigger);

运行此代码时收到错误:

  

在UpdatePanel'updatepanel'中找不到ID为'ctl00 $ content $ repeater $ ctl01 $ linkBut​​ton'的控件。

如何为每个LinkButtons动态添加触发器?

3 个答案:

答案 0 :(得分:8)

解决了这个问题。我假设它在我的OP中不起作用的原因是因为更新面板不能直接看到转发器控件。

我怀疑将它们移到转发器之外会解决它或对FindControl("linkbutton")调用进行调整以深入控制转发器,使用此方法意味着我需要创建两个链接按钮每个级别的对象都是不受欢迎的。

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

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

在转发器OnItemDataBound事件中,解决了它。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

整洁的解决方案是:

    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);
        }
    }

This is the source thread