From: Argiris K. <be...@us...> - 2005-11-22 00:59:30
|
Update of /cvsroot/magicajax/magicajax/Core/UI/Controls In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10664/Core/UI/Controls Modified Files: AjaxPanel.cs Log Message: More testing revealed that an AjaxPanel that is invisible and not contained inside another AjaxPanel, cannot be made visible during AjaxCall correctly. To spare developers the confusion, an exception is thrown when this situation occurs. Index: AjaxPanel.cs =================================================================== RCS file: /cvsroot/magicajax/magicajax/Core/UI/Controls/AjaxPanel.cs,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** AjaxPanel.cs 20 Nov 2005 20:04:24 -0000 1.19 --- AjaxPanel.cs 22 Nov 2005 00:59:22 -0000 1.20 *************** *** 395,398 **** --- 395,419 ---- } + #region override PutTagOnPageForAjaxCall + /// <summary> + /// If this AjaxPanel is inside another AjaxPanel it puts its empty tag on page + /// using "clientID$rbs" ID, otherwise it throws an exception. + /// </summary> + protected override void PutTagOnPageForAjaxCall() + { + if ( ! IsChildOfAjaxPanel(this) ) + throw new MagicAjaxException(String.Format("AjaxPanel '{0}' cannot get visible during an AjaxCall. It must be inside an AjaxPanel that is visible for the initial page request.", this.ClientID)); + + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + HtmlTextWriter strwriter = new HtmlTextWriter(new System.IO.StringWriter(sb)); + + this.RenderBeginTag (strwriter); + this.RenderEndTag (strwriter); + string html = sb.ToString(); + + AjaxCallHelper.WriteSetHtmlOfElementScript (html, this.ClientID + "$rbs"); + } + #endregion + #region RenderByScript /// <summary> *************** *** 588,592 **** { RenderedByScriptControl con = (RenderedByScriptControl) sender; ! e.Writer.Write ("<span id=\"{0}$rbs\" name=\"__ajax_rbs\"><{1} id=\"{0}\"></{1}></span>", con.ClientID, con.GetTagName()); e.AbortRendering = true; } --- 609,613 ---- { RenderedByScriptControl con = (RenderedByScriptControl) sender; ! e.Writer.Write ("<span id=\"{0}$rbs\" name=\"__ajax_rbs\"></span>", con.ClientID); e.AbortRendering = true; } *************** *** 746,749 **** --- 767,788 ---- #endregion + #region IsChildOfAjaxPanel + /// <summary> + /// Returns true if the given control is contained inside an AjaxPanel + /// </summary> + /// <param name="control"></param> + /// <returns></returns> + private bool IsChildOfAjaxPanel (Control control) + { + if ( control.Parent == null || control.Parent == control.Page ) + return false; + + if ( control.Parent is AjaxPanel ) + return true; + else + return IsChildOfAjaxPanel(control.Parent); + } + #endregion + #region FindUniqueID /// <summary> *************** *** 950,960 **** Write ("<span id=\"{0}$rbs\" name=\"__ajax_rbs\">", con.ClientID); onlyFullRender = true; - litewriter.Write ("<{0} id=\"{1}\">", con.GetTagName(), con.ClientID); } public void IScriptWriter_RenderEnd(object sender, System.EventArgs e) { - RenderedByScriptControl con = (RenderedByScriptControl) sender; - litewriter.Write ("</{0}>", con.GetTagName()); onlyFullRender = false; Write ("</span>"); --- 989,996 ---- |