Я решил проблему. Я переместил CKEditor за пределы UpdatePanel. Кнопка, находящаяся внутри UpdatePanel, позволяла мне запускать обратную передачу async, которая все же позволяла мне обращаться к данным в RepeaterItem, которые мне нужно было сохранить в базе данных.
С CKEditor за пределами UpdatePanel он больше не блокируется после async-обратной передачи. Я до сих пор не знаю, что именно заставляет CKEditor ломаться после обратной передачи, но, по крайней мере, я узнал, как это предотвратить. Надеюсь, этот ответ может помочь кому-то еще некоторое время.
У меня есть ретранслятор ASP.NET, который размещает несколько UpdatePanels на моей странице с текстовыми полями CKEditor, чтобы пользователи могли отвечать на вопросы. Я предоставил кнопку "Сохранить ответ", которая позволяет асинхронному обратному сообщению сохранить текущий ответ.
В Internet Explorer после асинхронной обратной передачи (которая правильно сохраняет ответ) страница блокируется и не позволяет пользователям снова выбирать текстовое поле или любой текст на странице. Пользователь может по-прежнему нажать кнопку "Продолжить" и любые ссылки, чтобы перейти от страницы, и нажатие на один из значков CKEditor (например, выделенная жирным шрифтом или уменьшение размера шрифта) восстанавливает возможность щелчка в текстовых окнах и выбора текст на странице снова.
Каждый другой крупный браузер работает отлично. Это происходит в IE 8+ (без поддержки до 8 или, скорее всего, там тоже произойдет).
Вот соответствующий код:
Javascript
function pageLoad() {
$(".editor").each(function () {
$(this).ckeditor().editor.on("change", function (event) {
// Updates the asp control on change
event.editor.updateElement();
});
});
}
Разметка (в повторителе ItemTemplate, повторяющаяся для каждого вопроса в применимых данных)
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
... Question stuff here...
<asp:TextBox ID="txtAnswer" runat="server" TextMode="MultiLine" CssClass="editor"></asp:TextBox>
<div>
<asp:Button ID="btnSave" runat="server" Text="Save Answer" Enabled="false" OnClick="SaveAnswer" />
</div>
</ContentTemplate>
</asp:UpdatePanel>
В С# нет исключений, и метод SaveAnswer() выполняется успешно, сохраняя ответ, но этот небольшой сбой кажется для меня довольно странным... Особенно тот факт, что это мешает вам выбирать любой текст на странице, а не только внутри экземпляров CKEditor.
Любые предложения очень ценятся - и спасибо за то, что нашли время, чтобы проверить мой вопрос.
Я решил проблему. Я переместил CKEditor за пределы UpdatePanel. Кнопка, находящаяся внутри UpdatePanel, позволяла мне запускать обратную передачу async, которая все же позволяла мне обращаться к данным в RepeaterItem, которые мне нужно было сохранить в базе данных.
С CKEditor за пределами UpdatePanel он больше не блокируется после async-обратной передачи. Я до сих пор не знаю, что именно заставляет CKEditor ломаться после обратной передачи, но, по крайней мере, я узнал, как это предотвратить. Надеюсь, этот ответ может помочь кому-то еще некоторое время.
просто дайте ckeditor обновить текстовое поле при изменении:
var ckEditor = CKEDITOR.replace(textAreaId);
ckEditor.on("change", function (event) {
event.editor.updateElement();
});