We use the CKEditor and the Syrinx wrapper to add an editor to the page, but during a postback (partial postback using the UpdatePanel) we will sometimes make the CKEditor go away, replace it with a plain text box, and then on some future partial postback, we reshow the editor. Once the editor is reshown, it has its text set to the correct value, but then displays an empty editor.
Here are the pertinent changes made in the wrapper code:
public static void setupScripts(Page page) { //page.ClientScript.RegisterClientScriptInclude("Swaf.CkEditorMain", page.ResolveUrl(CkEditorJS)); ScriptManager.RegisterClientScriptInclude(page, typeof(CkEditor), "Swaf.CkEditorMain", page.ResolveUrl(CkEditorJS)); //NRChange - using ScriptManager for partial postback support } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); setupScripts(Page); //NRChange - Added to handle partial postbacks ScriptManager.RegisterOnSubmitStatement(this, typeof(CkEditor), "CKEditorAjaxOnSubmit_" + ClientID, string.Format("try{{var e = CKEDITOR.instances.{0}; if (e != null)e.updateElement();}}catch(err){{}};", ClientID)); } protected override void Render(HtmlTextWriter writer) { writer.Write("<textarea id='{0}' name='{1}'></textarea>", ClientID, UniqueID); //writer.Write("<script type='text/javascript'>var t=\"{2}\";var e = CKEDITOR.instances.{0};if(e != null)CKEDITOR.remove(e);CKEDITOR.replace('{0}'{1}).setData(t);</script>", // ClientID, buildConfigOptions(), getTextForRender()); //NRChange - using ScriptManager for partial postback support ScriptManager.RegisterStartupScript(this, typeof(CkEditor), "startup" + ClientID, "" + "var t=\"" + getTextForRender() + "\";" + "var e = CKEDITOR.instances." + ClientID + ";" + " if(e != null)CKEDITOR.remove(e); " + "CKEDITOR.replace('" + ClientID + "'" + buildConfigOptions() + ").setData(t);" //+ "var newEditor = CKEDITOR.instances." + ClientID + ";" //+ "alert('text set to: ' + t);" //+ "alert('current text: ' + newEditor.getData());" + "", true); }
Re: UpdatePanle and Partial postback
With help of the thread and code from here viewtopic.php?t=15882 the problem has been solved.
Thank you Daniel Cohen Gindi danielgindi |at| gmail |dot| com
Here is what my PreRender and Render methods for the ASP.Net control look like. I am using the 4.0 framework and CKEditor 3.4