我试图在.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发送到后面的代码时,我只得到原始文本而不是编辑版本。
答案 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内容才会被发布到服务器。