【问题标题】:MVC: Ace editor postMVC:Ace 编辑器帖子
【发布时间】:2014-08-20 12:33:44
【问题描述】:

我目前正在编写一个 CMS 系统,我使用 ACE 语法高亮器突出显示文本框中的一些 HTML。

现在,我有一个显示内容的表单:

<div id="editor">@Html.TextAreaFor(model => model.Body)</div>

语法高亮通过以下 javacsript 激活:

<script>
    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/eclipse");
    editor.renderer.setShowGutter(false);
    editor.getSession().setMode("ace/mode/html");
</script>

但是在我的控制器中,我没有得到高亮文本区域的内容,这是正常的,因为语法高亮器正在生成复杂的 HTML。

谁知道如何解决这个问题?

【问题讨论】:

    标签: c# javascript jquery html asp.net-mvc


    【解决方案1】:

    在将数据发布到服务器之前,您必须将其分配到隐藏字段或返回到文本区域。这个问题已经回答了on StackOverflow here

    @Jan Jongboom 在发帖前使用下面的代码给 ACE 编辑器赋值:

    <%=Html.HiddenFor(m=>m.Editor, new { @id = "hidden_editor" }) %>
    
    <!-- this is jQuery, but you can use any JS framework for this -->
    <script>
        $("form").submit(function () {
            $("#hidden_editor").val(editor.getSession().getValue());
        });
    </script>
    

    这是 MVC 2 标记,但很容易被 Razor 采用。

    【讨论】:

    • 谢谢。我知道这是一个可行的解决方案,但我想避免它,因为这意味着当它可以以另一种方式完成时,将数据复制到另一个元素上。无论如何,我已将答案标记为已接受,因为我非常感谢您的帮助。但是,如果您有其他不需要复制数据的解决方案,我想向您了解。
    • 我担心没有其他解决方案。如果查看生成的 HTML,您会发现 TextArea 不包含编辑器内容。您必须从编辑器中提取内容并将其分配给一个字段才能在服务器上获取它。您可以尝试在提交之前将其分配给原始 TextArea(然后您将保存隐藏字段,尽管保留它也不会有太大问题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多