异步回发不会导致document.ready执行

我必须对几页中使用的用户控件实施一些更改。 用户控件包含一些JQuery来处理分页任务(显示3个月的数据并一次隐藏9个)。 加载控件后,它将自动显示当前季度并在$(document).ready()中执行此代码。

我遇到的问题是,在其中一个页面中使用了用户控件,该控件在页面加载时不可见。 异步回发用于更改可见性,但这不执行ready()。

我找到了一个片段,允许托管页面拦截部分回发的EndResponse,但我仍然无法在usercontrol中执行该function。

有没有人有什么建议?

干杯

戴夫

就像我一样,你会讨厌微软的答案。 “规定”的答案是使用PageRequestManager来设置请求处理程序。 在每个部分回发完成之后(然后)执行该请求处理程序。

请求处理程序示例:

 

这让我们回答简单的问题:
为什么不从代码隐藏中显式初始化用户控件,并在用户控件HTML(本身)中保持初始化JavaScript。

 void YourUserControl_PreRender(object sender, EventArgs e) { try { } catch (Exception ex) { } finally { // Do this ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "registerInitializer", buildInitializer(), true); } } 

渲染完成后,“buildInitializer”逻辑会说:“如果客户端上存在此函数,请调用它。” 而且……每次都有效。

 private string buildInitializer() { StringBuilder javascript = new StringBuilder(); javascript.Append("if (window.initializeMyControl) {"); javascript.Append("if(typeof window.initializeMyControl == 'function') { initializeMyControl(); }"); javascript.Append("}"); return javascript.ToString(); } 

现在,您的用户控件初始化可以存在于用户控件所在的位置: