如果尝试将RadAjaxManager添加到页面两次,这是一个众所周知的错误:
只能将一个RadAjaxManager实例添加到页面中。
如何用代理控件解决设计时问题的Telerik解释。
对于我们在页面上使用的大多数控件来说,即使每个控件上都有一个RadAjaxManager,有时甚至在中继器内(偶然,但仍然不会抛出错误),这个错误也不会触发。但是,对于一个这样的控件(一个动态按钮),我们已经将其添加到页面上的几个位置,没有问题,这可能是因为这是相同的控件,但是嵌套在另一个控件中,一旦我们将它添加到页面中,我们就会再次收到上面的错误。
我试图通过以下方式解决这个问题:
RadAjaxManager,并进行内置的额外检查,如下所示:
私有RadAjaxManager GetAjaxManager() { var ctl = this.FindControl("ajaxManager");if (ctl !=空){返回(RadAjaxManager)ctl;}/替代方法var mgr = RadAjaxManager.GetCurrent(this.Page);if (mgr = null) {返回mgr;} //控件永远返回空返回空;}保护覆盖无效OnInit(EventArgs e) { if (this.GetAjaxManager() == null) { // ajax从未找到,这总是引发//“无法多次添加”错误var ajaxManager =新RadAjaxManager();ajaxManager.ID = "ajaxManager";this.Controls.Add(ajaxManager);}}- Several variants of the above
其结果要么是:从未找到该控件,并因此多次添加该控件,从而导致上述错误,要么该控件在进程中被添加,但对于user控件中的其他控件来说太晚了,导致几个AJAX事件没有发生。
我应该如何将RadAjaxManager添加到其他几个用户控件内部使用的用户控件中,以便管理器只在页面上发生一次并且/或使RadAjaxManager.GetCurrent实际工作?
发布于 2015-04-29 14:39:08
平面A-将RadAjaxManager添加到页面级别,而不是添加到用户控件。因此,用户控件可以具有RadAjaxManagerProxy控件,静态GetCurrent()方法将工作。
计划B-如果您想要自包含的用户控件,请使用RadAjaxPanel控件。它们有一个ajaxRequest()客户端方法和一个服务器端事件,而且由于用户控件通常很小,您很可能可以为它们提供一个面板。
计划C-将AJAX设置留给父页面。如果父用户控件已经启用AJAX,则其全部内容将随回发一起传播,因此在内部用户控件上嵌套更多的AJAX设置可能不会给您带来性能好处。
计划D-只使用asp:UpdatePanel控件和UpdateMode=Conditional,所以您将有非常细粒度的控制您的部分呈现。
https://stackoverflow.com/questions/29940318
复制相似问题