CodeMirror不缩进代码

时间:2013-08-06 10:17:01

标签: html-encode codemirror

我遇到一些问题,让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,因为那个评论证明了代码镜可以处理缩进......

1 个答案:

答案 0 :(得分:1)

我建议您删除textarea并在页面上保留CodeMirror的实时实例。这样,您可以使用CodeMirror API将响应直接分配给该实例。

特别注意doc.setValue(content: string),这会让你走上正轨。