Редактор CK, изменяющий содержимое при обратной передаче (4.10.1) - PullRequest
0 голосов
/ 15 мая 2019

У меня проблема с CKEditor, кодирующим его HTML-контент, когда состояние модели недопустимо. Например, если я отправляю «Hello World», он успешно попадает на сервер в виде закодированной строки html <p>Hello World</p>.

Если я хочу загрузить контент, я передаю расшифрованную строку html в качестве значения текстовой области, и она прекрасно загружается <p>Hello World</p>. Однако, если страница отправляется обратно, например, когда (!ModelState.IsValid), то она отображается неправильно:

<p>&lt;p&gt;Hello World&lt;/p&gt;</p>

Вот кикер, он по-прежнему получает <p>Hello World</p> в качестве значения поля в обратной передаче. Что дает?

Я использую следующий источник:

const ckEditorSrc = "//cdn.ckeditor.com/4.10.1/standard/ckeditor.js";

и нижний инициализатор:

CKEDITOR.replace('js-ck-editor', { htmlEncodeOutput: true});
CKEDITOR.config.height = 600;

Я проверил, и инициализатор ударил после обратной передачи.

Единственная другая информация, которая может помочь, заключается в том, что источник загружается динамически с помощью простой функции loadScript.

function loadScript(url, callback) {// loads a script onto a page
    var script = document.createElement("script");
    script.type = "text/javascript";
    if (script.readyState) {  //IE
        script.onreadystatechange = function () {
            if (script.readyState === "loaded" || script.readyState === "complete") {
                script.onreadystatechange = null;
                callback();
            }
        };
    } else {  //Others
        script.onload = function () {
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);
}

Вот краткая функция инициализации для краткости:

var ckEditor = function () {// init ckeditor

    if ($('#js-ck-editor').length) {
        const ckEditorSrc = "//cdn.ckeditor.com/4.10.1/standard/ckeditor.js";
        loadScript(ckEditorSrc, function () {

            CKEDITOR.replace('js-ck-editor', { htmlEncodeOutput: true});
            CKEDITOR.config.height = 600;
        }
    }
}

1 Ответ

0 голосов
/ 16 мая 2019

Оказывается, проблема была в использовании asp.net html помощников.

Я изменил @Html.TextAreaFor(m=>m.Text)

на <textarea name="Text" id="js-ck-editor">@Model.Text</textarea>

Теперь все работает нормально.После нескольких часов прокрутки документации ckeditor оказывается, что это было такое простое решение.Ах, надеюсь, это поможет кому-то еще однажды.

...