Звонок Крису Марисику:
Если Крис Марисик захочет обновить свой комментарий до ответа, я дам ему печенье.
Я решил следующим образом:
Форма Ajax:
<div id="ajaxEditor">
@using (Ajax.BeginForm(MVC.Admin.StepEditor.Edit(), new AjaxOptions { UpdateTargetId = "ajaxEditor", HttpMethod = "POST", OnComplete="ReBindCKEditor" },
new { @name = "EditStepForm", @id = "EditStepForm" }))
{
<div class="editor-label">
@Html.LabelFor(model => model.StepText)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.StepText, 20, 68, null)
@Html.ValidationMessageFor(model => model.StepText)
</div>
}
</div>
Javascript:
Поскольку возвращающаяся ошибка (см. Ответ на вопрос Криса Марисика) утверждает, что экземпляр CKEDITOR уже существует, мне нужно от него избавиться. Итак:
function BindCKEditor() {
var elem = $('#StepText');
elem.ckeditor(function () {}, { toolbar: [
['Source'],
['Preview'],
['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Scayt'],
['Undo', 'Redo', '-', 'Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
['Image', 'Table', 'HorizontalRule'],
['Styles', 'Format'],
['Bold', 'Italic', 'Strike'],
['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
['Link', 'Unlink', 'Anchor']
]
});
}
BindCKEditor () просто делает то, что говорит на жестяной банке. Он настраивает редактор и применяет его.
Теперь, когда я перезаписываю текстовую область ответом ajax, мне нужно удалить этот экземпляр и создать его заново. Итак:
function ReBindCKEditor() {
delete CKEDITOR.instances['StepText'];
BindCKEditor();
}
Обратите внимание, что я использую ReBindCKEditor () в OnComplete для формы Ajax. Я использую oncomplete, а не onsuccess, потому что я хочу, чтобы он выполнял повторную привязку независимо от того, успешен ли этот вызов ajax или нет.
УСПЕХ:
Я не могу рекомендовать ckeditor достаточно высоко. Я думал, что это будет кошмар, чтобы решить, но как только я сел и отложил эти мысли в сторону, я обнаружил, что была очень краткая документация и хорошие форумы пользователей.
Я просмотрел множество других текстовых редакторов, и ни один из них не был настолько хорош или так хорошо поддержан Yahoo выглядела хорошо, но была кошмаром и плохой документацией, если вы не являетесь экспертом по javascript, которым я не являюсь.
Я чуть не пошел с lwrte, это выглядело хорошо, но никакой поддержки за этим не было.
Я посмотрел на других, которые останутся безымянными.
Но ckEditor действительно впечатлил меня. Теперь я могу выкатить его туда, куда захочу, без страха и трепета.
Примечание:
Я не работаю на CKEditor и не имею к ним никакого отношения. Это настоящий энтузиазм. Да, такая вещь существует.