我创建了一个Footer UserControl,我根据许多因素动态添加控件。我希望其中一些控件成为同一页面上UpdatePanel的触发器。
我在后面的代码中有以下内容:
private void SetupFooter()
{
WebToolBar footerToolBar = this.ShowFooterToolBar("~/ToolBars/PM_Footer.ascx");
footerToolBar.ID = "PM_Footer";
footerToolBar.OnNotify += new WebToolBar.OnNotifyHandler(footerToolBar_OnNotify);
WebToolButton button = new WebToolButton();
button.ID = "btn_Add";
button.Text = "Add";
button.ImageDefault = "~/Images/Icons/16/Plus.png";
button.CommandName = "Add";
button.Group = "1";
footerToolBar.AddWebToolButton(button);
AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
trigger.ControlID = button.ID;
trigger.EventName = "Click";
pnl_Suppliers.Triggers.Add(trigger);
}
我收到错误:
在UpdatePanel'pnl_Suppliers'中找不到ID为“btn_Add”的控件。
如果我将WebToolButton(基本上是一个带有Text的ImageButton)直接添加到页面而不是UserControl内部,那么它可以完美地工作。不幸的是,我希望我可以在我的UserControl(“PM_Footer.ascx”)中使用它,因为它封装了许多辅助功能和事件挂钩。
这一切都可能吗?我抓住了吸管,并尝试将UniqueID和ClientID分配给更新面板,但只是看起来其他用户控件中的任何控件都不能用作UpdatePanel的触发器...这在某种程度上是有意义的。
答案 0 :(得分:2)
我不知道您要求的是否可行,但为什么不通过WebToolBar控件提升自定义按钮单击事件?然后可以将此事件直接分配给触发器。
答案 1 :(得分:2)
RegisterAsyncPostBackControl可能有效,但正如Preeti所说,您可能还需要从控件中公开事件并注册该事件。此外,您正在动态添加控件,并且必须在每个回发(OnPreRender)上重新添加该控件才能正确触发事件。
ScriptManager1.RegisterAsyncPostBackControl(button );
<强>参考:强>
Dynamically Register an Asynchronous Postback Control with a ScriptManager