【问题标题】:Regarding Ajax in UserControl关于 UserControl 中的 Ajax
【发布时间】:2011-05-25 05:14:58
【问题描述】:

我们创建了一个用户控件。在用户控件内部,我们正在创建一个更新面板。在面板内部,我们正在创建各种控件,例如 TextBox、Button、DropDownList 和 ListBox,以及与它们关联的事件 buttonclick()、DropDown_selectedIndexChanged()、TextBox_TextChenged() 等。所有控件(包括更新面板)都是使用 c# 以编程方式创建的。 为了 ajaxify 我们使用了 ScriptManager 的事件。

ScriptManager 以编程方式添加到 OnInit 函数上,如下所示:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
            if (scriptManager == null)
            {
                scriptManager = new ScriptManager();
                //scriptManager.EnablePartialRendering = true;
                this.Controls.AddAt(0,scriptManager);
            }

每次页面加载后只有一个事件被触发部分回发(这是期望的),但之后没有事件被触发。

所有有效的更改都已在 AJAX 的 web.config 文件中完成。 请提出问题的可能原因和解决方案。

【问题讨论】:

  • 您是否收到任何错误消息?
  • 没有错误消息,包括任何 javascript 错误。

标签: asp.net user-controls asp.net-ajax updatepanel


【解决方案1】:

在部分回发时,不会添加 ScriptManager,因为您试图将其添加到 UpdatePanel 之外(它必须在的位置)。这适用于第一页加载,因为它不是部分回发。但是在部分回发之后,动态添加的 ScriptManager 将无法用于页面,并且因为您试图在 UpdatePanel 之外添加它——AddAt(0,...)——在部分回发之后,它实际上不会被添加。在部分回发时,您只能影响 UpdatePanel 中启动回发的内容。

底线是,您真的不能动态添加 ScriptManager,因为在部分回发后它永远不会存在。就像您不能在 UpdatePanel 内部发生事件后动态添加任何其他控件一样。

【讨论】:

  • 但同一个应用程序在另一台具有相同配置的服务器上运行良好。
  • 直觉上,我认为初始页面加载生成的所有脚本在部分回发后不会与 UpdatePanel 内生成的任何脚本正确链接,因为它是由不同的实例生成的脚本管理器。不过,我可能是错的,也许 ScriptManager 它不依赖于上下文,但这种设计会起作用似乎非常违反直觉。无论如何,如果它可以在具有完全相同配置的另一台服务器上运行......那么我会说配置可能不完全相同。
  • 你看到这个帖子了吗?这可以通过多种方式起作用。 stackoverflow.com/questions/183950/…
猜你喜欢
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2012-11-21
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多