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