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に賛成票を投じました...