2

だから私は自分のプロジェクトにckeditorをインストールしました。コントロールは正常に読み込まれ、表示できます。テキストエリアに何かを入力すると、エラーが発生します。[次へ] ボタンが機能しません。テキストエリアにテキストがない場合、「次へ」ボタンは正常に機能します。テキストがあり、[次へ] ボタンを押すと、ブラウザにもこれらのエラーが表示されます。

編集: ここでのビューはPartial Viewであることに注意してください。

ブラウザのエラー

ckeditor 3.6.4を使用しています。Nugetを使用してインストールしました。付属の適切なファイルがあります。

私の _Shared/Layout ファイルには、次のものを含めます。

<script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/ckeditor.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/ckeditor/adapters/jquery.js")"></script>

私の見解では、次のものがあります。

@using (Ajax.BeginForm("SomeAction", "SomeController", new { id = Model.Id}, new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "dynamicData", InsertionMode = InsertionMode.Replace }))
        {
            <div class="grid_6">
                @Html.TextAreaFor(x => x.SomeText, new { @class = "someTextArea" })
            </div>

            <div class="grid_6 alpha omega">
                <input type="submit" value="Next" class="grid_6 alpha omega button drop_4 gravity_5" />
            </div>
        }

私のjavascriptには次のものがあります:

<script type="text/javascript">
    $(function () {
        ReBindCKEditor();
    });

    function BindCKEditor() {
        var elem = $('#SomeText');
        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']
        ]
        });
    }

    function ReBindCKEditor() {
        delete CKEDITOR.instances['SomeText'];
        BindCKEditor();
    }
</script>
4

2 に答える 2

1

送信する前に、ckeditorが使用する非表示のテキストフィールドを更新する必要があります。これはで行うことができます

for ( instance in CKEDITOR.instances )
    CKEDITOR.instances[instance].updateElement();

上記の名前に従うために呼び出されるjavascript関数でこれをラップBeforeSubmittingCKEditorすると、BeginFormに次のフックを追加できます。

OnBegin = "BeforeSubmittingCKEditor"

したがって、AjaxOptionsは次のようになります。

new AjaxOptions { HttpMethod = "Post", 
                  UpdateTargetId = "dynamicData", 
                  InsertionMode = InsertionMode.Replace,
                  OnBegin = "BeforeSubmittingCKEditor" }
于 2012-10-15T07:59:50.047 に答える
0

ほとんどの場合 (エラーの詳細がなければ、100% 確信することは困難です。エラー応答の実際の内容が役立ちます)、ここで「潜在的に危険な Request.Form 値がクライアントから検出されました」という問題にぶつかっています。既定では、ASP.NET MVC フレームワークは、モデル バインド中に要求をチェックして、HTML マークアップとして潜在的に危険なコンテンツが含まれているかどうかを判断します。HTML が検出された場合、モデル バインディングはエラーをスローします。

これには2つの方法があります。最初AllowHtmlAttributeに、サーバー側のモデル クラスで使用するようにアプローチします。

...
[AllowHtml]
public string SomeText { get; set; }
...

2 番目の方法は、オプションを使用してCKEditorでクライアント側の出力エンコーディングを有効にすることです。htmlEncodeOutput

function BindCKEditor() {
    var elem = $('#SomeText');
    elem.ckeditor(function () { }, {
        htmlEncodeOutput: true,
        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']
        ]
    });
}

より詳細な分析を行うには、エラー メッセージ全体を確認する必要があります。

于 2012-10-15T08:23:01.040 に答える