在ASP.Net中使用tinymce内联div InnerHtml

时间:2014-07-11 13:03:47

标签: c# asp.net innerhtml tinymce-4

我试图在.net页面中设置一个内联编辑,但是我还要从div的内部HTML中获取已编辑的文本。

<script src="../Scripts/Tiny4/tinymce.min.js"></script>
<script>
    tinymce.init({
        selector: "div.edit",
        theme: "modern",
        plugins: [
            ["advlist autolink link image lists charmap print preview hr anchor pagebreak spellchecker"],
            ["searchreplace wordcount visualblocks visualchars code fullscreen insertdatetime media nonbreaking"],
            ["save table contextmenu directionality emoticons template paste"]
        ],
        add_unload_trigger: false,
        schema: "html5",
        inline: true,
        toolbar: "undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image     | print preview media",
        statusbar: false
    });


</script> 

    <form id="form1" runat="server">
    <div>

        <div runat="server" ID="editdiv" class="edit">Original text</div>

        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

    </div>
    </form>

ASP代码背后:

protected void Button1_Click(object sender, EventArgs e)
    {
        OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("/App_Data/tiny.mdb"));
        OleDbCommand cmd = new OleDbCommand("UPDATE [tinytest] SET [divtext] = @divtext WHERE ID = 34", conn);
        cmd.Parameters.AddWithValue("@divtext", editdiv.InnerHtml);
        cmd.CommandType = CommandType.Text;
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
    }

tinymce编辑器按预期启动,但当我尝试将InnerHtml发送到后面的代码时,我只得到原始文本而不是编辑版本。

1 个答案:

答案 0 :(得分:1)

div不是在网络表单中存储值的好地方。

如果框架从任何地方获取editdiv.InnerHtml的值,那么它可能来自视图状态。至少,它肯定不是来自客户端HTML。这是因为当页面回发到服务器时,无论WebForms试图让你想到什么,它仍然是一个普通的HTML表单帖子。这意味着其值来自form元素,仅来自form元素。 HTML页面内容未发布到服务器。查看状态是,因为它是填充到页面上input type="hidden"的base-64编码字符串。

可以做的是创建你自己的隐藏输入:

<asp:Hidden runat="server" id="editdivcontents" />

然后,在您的客户端代码中,当您更改input type="hidden"的内容时,您将更新结果div的值。然后将该值发回服务器并可以访问:

cmd.Parameters.AddWithValue("@divtext", editdivcontents.Text);

我不完全确定在div更改时如何更新隐藏的输入元素,因为我不熟悉TinyMCE。 (虽然我认为它可以通过响应DOM中的事件在该工具之外手动完成。)但最终这就是你需要做的事情,因为只有表单元素值而不是DOM内容才会被发布到服务器。