ASP.Net - UpdatePanel是否可以将UserControl中的控件用作触发器?

时间:2009-10-08 11:27:24

标签: asp.net ajax triggers updatepanel

我创建了一个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的触发器...这在某种程度上是有意义的。

2 个答案:

答案 0 :(得分:2)

我不知道您要求的是否可行,但为什么不通过WebToolBar控件提升自定义按钮单击事件?然后可以将此事件直接分配给触发器。

答案 1 :(得分:2)

RegisterAsyncPostBackControl可能有效,但正如Preeti所说,您可能还需要从控件中公开事件并注册该事件。此外,您正在动态添加控件,并且必须在每个回发(OnPreRender)上重新添加该控件才能正确触发事件。

ScriptManager1.RegisterAsyncPostBackControl(button );

<强>参考:

Dynamically Register an Asynchronous Postback Control with a ScriptManager

相关问题