CKEditor(.net)在回发中消失,HttpResponse被劫持以提供下载流

时间:2015-09-30 18:49:02

标签: asp.net twitter-bootstrap ckeditor postback httpresponse

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

问题是,在我开始下载后,当我切换回带有CKEditor实例的选项卡时,它就消失了。

任何想法如何解决?我怀疑这与我从服务器上攻击HttpResponse以提供下载的事实直接相关,但为什么CKE实例会消失?

1 个答案:

答案 0 :(得分:0)

以下是我修复它的方法:每当有人打开带有ckeditor的标签时,我都会使用cke的js API来恢复它。

<强> HTML

    <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解码内容。