如何在回发后保持 HTML div 的状态

How to keep the state of HTML div after postback

我在我的网络表单应用程序中使用 CKEditor 是这样的:

  <div class="editor" runat="server" EnableViewState="true">
       <div cols="10" id="editor1" name="editor1" data-sample-short contenteditable="true" runat="server" EnableViewState="true">
          TEST
       </div>
   </div>

我想在回发后得到 editor1.InnerText,但我不能,因为它是无状态的 HTML div,同时我不能使用等效的服务器控件,因为我已经在此控件上处理了所需的事件。 postback后如何保留数据?

按如下方式使用隐藏文本字段:

<asp:TextBox ID="tbTransfer" runat="server" TextMode="Multiline"></asp:TextBox>

在Javascript中:

//Set Transfer Textbox display to none
document.getElementById('MainContent_tbTransfer').style.display = "none";

//Set Initial Source Code of CKEditor to Transfer TextBox's value
CKEDITOR.instances.editor1.setData(document.getElementById('MainContent_tbTransfer').value);

//Use this function for when you want to do the PostBack
function PostBack() {
    var temp = CKEDITOR.instances.editor1.getData();

    document.getElementById('MainContent_tbTransfer').value = temp.replace(/</g, "d123").replace(/>/g, "d321").replace(/&/g,"d111");
}

在代码隐藏中:

//Getting the HTML source code of CKEditor from the Transfer Textbox and Decrypting it
string htmlToSave = tbTransfer.Text.Replace("d123", "<").Replace("d321", ">").Replace("d111", "&");

//Setting back the Transfer Textbox's text to the decrypted HTML source code
//for when the page reloads at the end of the function,
//CKEditor sets its data = Transfer Textbox's Text
tbTransfer.Text = htmlToSave;

HTML 代码的加密和解密是必要的,因为 Web 浏览器会将字符“<”、“>”、“&”识别为 HTML 标记,并且不会让您 post 返回文本框内的普通 HTML 文本。

如果您的文本框在浏览器中有不同的 ID,请不要忘记更改 'MainContent_tbTransfer'