我遇到一些问题,让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是runat服务器,用于填充数据库中的值。我尝试过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);
}
});
保存和其他所有工作都很完美,因为textarea仍然在服务器上运行,所以仍然可以“保存”它的值,因为代码镜像负责这一点。
我很确定管道中还有其他内容正在填充文本,并且在我第一次尝试代码镜像可以及时到达它之前“格式化”不同。但是,随着ajax调用问题消失,因为浏览器/框架/任何没有任何机会访问数据库返回的字符串。它直接提供给代码镜像实例来处理它。
因此,如果您遇到类似的问题,可能更容易改变方法......
干杯
罗宾
注意:Eliran接受了答案,因为它给了我这个想法,并且赞成了Marjin,因为那个评论证明了代码镜可以处理缩进......
答案 0 :(得分:1)
我建议您删除textarea
并在页面上保留CodeMirror的实时实例。这样,您可以使用CodeMirror API将响应直接分配给该实例。
特别注意doc.setValue(content: string)
,这会让你走上正轨。