AJAX 计时器控件每 5 秒加载一个控件

发布于 2024-09-07 04:10:59 字数 1268 浏览 1 评论 0原文

我有以下层次结构

页面 -> Usercontrol1 与 (asp:UpdatePanel & asp:Timer) ---> Usercontrol2 与 (asp:UpdatePanel) 与网格

在页面加载中,我正在加载 usercontrol1,然后 usercontrol1 加载 usercontrol2。

我收到以下错误:-

“无法取消注册 ID 为“UpdatePanel1”的 UpdatePanel,因为它未在 ScriptManager 中注册。如果将 UpdatePanel 从控制树中删除并稍后添加,则可能会发生这种情况”

现在我已尝试使用

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    this.UpdatePanel1.Unload += new EventHandler(UpdatePanel_Unload);
}


void UpdatePanel_Unload(object sender, EventArgs e)
{
    this.RegisterUpdatePanel(sender as UpdatePanel);
}



public void RegisterUpdatePanel(UpdatePanel panel)
{

    foreach (MethodInfo methodInfo in typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
    {

        if (methodInfo.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel"))
        {

            methodInfo.Invoke(ScriptManager.GetCurrent(Page), new object[] { panel });

        }

    }

此后出现以下错误:-

“在 DataBind、Init、Load、PreRender 或 Unload 阶段无法修改控件集合。”

如果我从 usercontrol2 中删除更新面板,效果很好...但需要在 usercontrol2 中发回 ajax。

有人可以帮忙吗?

谢谢 赛义夫

I have the following Hierarchy

Page
-> Usercontrol1 with ( asp:UpdatePanel & asp:Timer)
---> Usercontrol2 with (asp:UpdatePanel) with a grid

In page load i am loading usercontrol1, then usercontrol1 loads usercontrol2.

I am getting following error :-

"Cannot unregister UpdatePanel with ID 'UpdatePanel1' since it was not registered with the ScriptManager. This might occur if the UpdatePanel was removed from the control tree and later added"

Now I have tried with

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    this.UpdatePanel1.Unload += new EventHandler(UpdatePanel_Unload);
}


void UpdatePanel_Unload(object sender, EventArgs e)
{
    this.RegisterUpdatePanel(sender as UpdatePanel);
}



public void RegisterUpdatePanel(UpdatePanel panel)
{

    foreach (MethodInfo methodInfo in typeof(ScriptManager).GetMethods(BindingFlags.NonPublic | BindingFlags.Instance))
    {

        if (methodInfo.Name.Equals("System.Web.UI.IScriptManagerInternal.RegisterUpdatePanel"))
        {

            methodInfo.Invoke(ScriptManager.GetCurrent(Page), new object[] { panel });

        }

    }

After this i am getting the following error :-

"The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases."

If i remove the update panel from usercontrol2 this works fine... but need an ajax post back in usercontrol2.

Can someone help ?

Thanks
Saif

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文