CKEditor (.net)在回发时消失,HttpResponse被劫持以交付下载流



我有一个页面上有2个选项卡(使用bootstrap的.tab-nav)。在一个选项卡中,在更新面板中,我有一个CKEditor 4。x实例。在另一个选项卡中,我有一个按钮,通过HttpResponse(启动下载)推送CSV文件。这个下载按钮触发一个完整的回发,因为部分回发不能推送下载流。

问题是,在我启动下载后,当我切换回CKEditor实例的选项卡时,它消失了。

有什么建议吗?我怀疑这与我从服务器窃取HttpResponse以交付下载的事实直接相关,但是为什么CKE实例会消失呢?

我是这样修复的:每次有人打开带有ckeditor的选项卡时,我使用ckeditor的js API来恢复它。

    <ul class="nav nav-tabs" role="tablist">
        <li class="active"><a href="#tab1" role="tab" data-toggle="tab">Tab 1</a></li>
        <li><a href="#tab2" role="tab" data-toggle="tab">Tab 2</a></li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane active" id="tab1">
            ...
        </div>
        <div class="tab-pane" id="tab2">
            <textarea class="ckeditor" id="ckeditor1" />
            ...
        </div>
    </div>

JS

    // Every time someone opens the ckeditor-containing tab, replace the CKEditor if it is missing
    $("a[href='#tab2']").on("shown.bs.tab", function (e) {
        if (CKEDITOR.instances.ckeditor1 == null) {
            // Decode the textarea content
            var t = $("#ckeditor1");
            t.val(CKEDITOR.tools.htmlDecode(t.val()));
            // Show the ckeditor instance
            CKEDITOR.replace("ckeditor1", { toolbar: 'CustomToolBar' });
        }
    });

仅仅使用CKEDITOR.replace不起作用,因为内容在存储到缓存中时被编码。我不得不从4.0.2升级cke,以便在恢复实例时可以使用CKEDITOR.tools.htmlDecode解码内容。

相关内容

最新更新