我在让 CodeMirror 在新行的开头缩进代码时遇到了一些问题。
我有一个文本区域,当我点击保存时,保存到数据库的代码类似于:
<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
......即尝试将该字符串分配给textarea,然后将其“转换”到页面上带有相关js的代码镜像编辑器中,缩进在新行的开头丢失。但是,如果我沿着一条线缩进一半,那些渲染。
此外,如果有一个新行返回,然后是一个空白行,然后是更多文本,则在读回文本区域时,空白行会丢失。
注意:textarea 是在服务器上运行的,用于从数据库中填充值。我尝试过使用 div 和文字,但无法正常工作。
那么我怎样才能保存类似的东西:
<div>
<b>
test
</b>
</div>
而不是把它找回来
<div>
<b>
test
</b>
</div>
我想我必须在保存时对其进行编码,但我发誓我已经尝试了所有编码方法并且现在可以工作了!哈哈
任何指针将不胜感激。
干杯
罗宾
更新/解决方案
我回来把这个放进去,以防有人偶然发现这篇文章。
基本上,我仍然无法在相关的特定页面上很好地播放以下内容。IE
背后的代码
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);
}
});
保存和其他一切工作完美,因为 textarea 仍然在服务器上运行,所以仍然可以在“保存”时获得它的值,因为代码镜像会处理这个问题。
我相当确定管道中还有其他东西正在填充文本并“格式化”它,然后代码镜像可以在我第一次尝试时及时获取它。但是,通过 ajax 调用,问题就消失了,因为浏览器/框架/任何东西都没有机会访问数据库返回的字符串。它直接馈送到处理它的代码镜像实例。
因此,如果您遇到类似的问题,可能更容易改变方法......
干杯
罗宾
注意:Eliran 接受了答案,因为它给了我这个想法,并支持 Marjin,因为该评论证明代码镜像可以处理缩进......