int _asyncPostBackTimeout = 90;
List<Control> _asyncPostBackControls;
List<Control> _postBackControls;
+ List<UpdatePanel> _childUpdatePanels;
+ List<UpdatePanel> _panelsToRefresh;
List<UpdatePanel> _updatePanels;
ScriptReferenceCollection _scripts;
bool _isInAsyncPostBack;
return sb.ToString ();
}
- static string FormatListIDs (List<Control> list, bool useSingleQuote) {
+ static string FormatListIDs<T> (List<T> list, bool useSingleQuote) where T : Control {
if (list == null || list.Count == 0)
return null;
WriteCallbackOutput (output, pageRedirect, null, redirectUrl);
}
- static internal void WriteCallbackPanel (TextWriter output, string clientID, StringBuilder panelOutput) {
- WriteCallbackOutput (output, updatePanel, clientID, panelOutput);
+ internal void WriteCallbackPanel (TextWriter output, UpdatePanel panel, StringBuilder panelOutput) {
+ if (_panelsToRefresh == null)
+ _panelsToRefresh = new List<UpdatePanel> ();
+ _panelsToRefresh.Add (panel);
+
+ WriteCallbackOutput (output, updatePanel, panel.ClientID, panelOutput);
+ }
+
+ internal void RegisterChildUpdatePanel (UpdatePanel updatePanel) {
+ if (_childUpdatePanels == null)
+ _childUpdatePanels = new List<UpdatePanel> ();
+ _childUpdatePanels.Add (updatePanel);
}
static void WriteCallbackOutput (TextWriter output, string type, string name, object value) {
WriteCallbackOutput (output, asyncPostBackControlIDs, null, FormatListIDs (_asyncPostBackControls, false));
WriteCallbackOutput (output, postBackControlIDs, null, FormatListIDs (_postBackControls, false));
WriteCallbackOutput (output, updatePanelIDs, null, FormatUpdatePanelIDs (_updatePanels, false));
+ WriteCallbackOutput (output, childUpdatePanelIDs, null, FormatListIDs (_childUpdatePanels, false));
+ WriteCallbackOutput (output, panelsToRefreshIDs, null, FormatListIDs (_panelsToRefresh, false));
WriteCallbackOutput (output, asyncPostBackTimeout, null, AsyncPostBackTimeout.ToString ());
WriteCallbackOutput (output, pageTitle, null, Page.Title);
}
protected override void RenderChildren (HtmlTextWriter writer) {
- if (ScriptManager.IsInAsyncPostBack && RequiresUpdate && !ScriptManager.IsInPartialRendering) {
- ScriptManager.IsInPartialRendering = true;
- HtmlTextWriter responseOutput = ((ScriptManager.AlternativeHtmlTextWriter) writer).ResponseOutput;
- StringBuilder sb = new StringBuilder ();
- HtmlTextWriter w = new HtmlTextWriter (new StringWriter (sb));
- base.RenderChildren (w);
- w.Flush ();
-
- ScriptManager.WriteCallbackPanel (responseOutput, ClientID, sb);
- for (int i = 0; i < sb.Length; i++)
- writer.Write (sb [i]);
-
- ScriptManager.IsInPartialRendering = false;
+ if (ScriptManager.IsInAsyncPostBack){
+ if (RequiresUpdate && !ScriptManager.IsInPartialRendering) {
+ ScriptManager.IsInPartialRendering = true;
+ HtmlTextWriter responseOutput = ((ScriptManager.AlternativeHtmlTextWriter) writer).ResponseOutput;
+ StringBuilder sb = new StringBuilder ();
+ HtmlTextWriter w = new HtmlTextWriter (new StringWriter (sb));
+ base.RenderChildren (w);
+ w.Flush ();
+
+ ScriptManager.WriteCallbackPanel (responseOutput, this, sb);
+ for (int i = 0; i < sb.Length; i++)
+ writer.Write (sb [i]);
+
+ ScriptManager.IsInPartialRendering = false;
+ }
+ else {
+ if (ScriptManager.IsInPartialRendering)
+ ScriptManager.RegisterChildUpdatePanel (this);
+ base.RenderChildren (writer);
+ }
}
else
base.RenderChildren (writer);