0

CodeMirror が新しい行の先頭でコードをインデントするのに問題があります。

テキスト領域があり、保存を押すと、DB に保存されるコードは次のようになります。

<meta charset=\"utf-8\">\r\n\t\t\t<title></title>\r\n\r\n<div class=\"wra ... etc

しかし、それを読んでasp.netのコードビハインドで行うと、 ViewCode.Text = dbModel.ViewCode...つまり、その文字列をテキストエリアに割り当てようとすると、ページ上の関連するjs、インデントでコードミラーエディターに「変換」されます新しい行の先頭が失われます。ただし、行の途中でインデントすると、レンダリングされます。

また、改行、空白行、さらにテキストがある場合、テキスト領域に読み戻されると、空白行が失われます。

注: テキストエリアはサーバーで実行され、データベースから値を入力します。div とリテラルを試しましたが、うまくいきません。

では、次のようなものを保存するにはどうすればよいですか。

<div>
   <b>
       test
   </b>
</div>

のように戻らない

<div>
<b>
test
</b>
</div>

保存時にエンコードする必要があると思いますが、すべてのエンコード方法を試して、今は機能していることを誓います! 笑

任意のポインタをいただければ幸いです。

乾杯

ロビン

更新/解決策

誰かがこの投稿に出くわした場合に備えて、私はこれを入れるために戻ってきました.

基本的に、問題の特定のページで以下をうまく再生することができませんでした。いえ

コードビハインド

ViewCode.Value = dbModel.ViewCode

どこ

dbModel.ViewCode  
//  --> is comes from db as e.g.: 
// <meta charset=\"utf-8\">\r\n\t\t\t<title></title>\r\n\r\n<div class=\"wra ... etc

JS (ページの最後)

<script>

 var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("ViewCode"), {
        lineNumbers: true
    });

</script>

ただし、ページに同じ JS コードを配置しても、コード ビハインドからテキスト領域を埋めないでください。次に、ページ メソッドへの単純な ajax 呼び出しを行って、(ページの読み込み時に) データを取得します。

$.ajax({
            url: '/WidgetMaint.aspx/GetFileHTML',
            type: 'Get',
            contentType: 'application/json',
            data: { tempid: id },
            success: function(result) {
                myCodeMirror.setValue(result.d);
            }
        });

テキストエリアはまだサーバーで実行されているため、保存と他のすべてが完全に機能し、コードミラーがこれを処理するため、「保存時に」その値を取得できます。

私が行っていた最初の試みで、コードミラーが間に合うようにテキストに到達する前に、パイプラインにテキストを詰め込んで「フォーマット」している何かが他にあると確信しています。ただし、ajax 呼び出しを使用すると、ブラウザ/フレームワークなどに DB が返す文字列にアクセスする機会がないため、問題は解消されます。それを処理するコード ミラーのインスタンスに直接フィードされます。

したがって、同様の問題が発生している場合は、アプローチを変更する方が簡単かもしれません....

乾杯

ロビン

注:このアイデアを私に与えてくれたEliranの回答を受け入れ、そのコメントがコードミラーがインデントを処理できることを証明したため、Marjinに賛成票を投じました...

4

1 に答える 1