用户控件中的 RadAjaxManager,每页最多有一个这样的管理器

RadAjaxManager in a user control with at most one such manager per page

如果您尝试将 RadAjaxManager 添加到您的页面两次,这是一个众所周知的错误:

Only one instance of a RadAjaxManager can be added to the page

Telerik explains 如何使用代理控件解决设计时问题。

对于我们在页面上使用的大多数控件,不会触发此错误,即使这些控件中的每一个都有一个 RadAjaxManager,有时甚至在转发器中(意外地,但仍然是错误不扔)。但是,使用一个这样的控件(一个动态按钮),我们可以毫无问题地将它添加到页面上的多个位置,这可能是因为它们都是同一个控件,但嵌套在另一个控件中,我们再次收到上面的错误,只要我们将其添加到页面。

我尝试通过以下方式解决:

结果是:从未找到该控件,因此添加了不止一次,导致上述错误,或者添加了该控件,但在 usercontrol 中的其他控件的过程中为时已晚,导致几个 AJAX 事件没有发生。

我应该如何将 RadAjaxManager 添加到一个用户控件中,该用户控件本身在其他几个用户控件中使用,这样管理器只在页面 and/or 上出现一次,这样 RadAjaxManager.GetCurrent 真的有用吗?

Plane A - 将 RadAjaxManager 添加到页面级别,而不是用户控件。因此,用户控件可以有 RadAjaxManagerProxy 控件,静态 GetCurrent() 方法将起作用。

B 计划 - 如果您想要独立的用户控件,请使用 RadAjaxPanel 控件。他们有一个 ajaxRequest() 客户端方法和一个服务器端事件,并且由于用户控件通常很小,您可能可以为他们使用一个面板。

C 计划 - 将 AJAX 设置留给父页面。如果父用户控件已经 AJAX 启用,其全部内容将随回传一起传输,因此需要更多 AJAX 内部用户控件设置可能不会给您带来性能优势。

计划 D - 仅使用 asp:UpdatePanel 控件和 UpdateMode=Conditional,这样您就可以对局部渲染进行极其精细的控制。