Использование tinymce inline div InnerHtml в ASP.Net

Я пытаюсь настроить встроенное редактирование tinymce на странице.net, но я изо всех сил стараюсь поднять отредактированный текст из div InnerHtml.

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

 <div runat="server" id="editdiv">Original text</div>

 <asp:button id="Button1" runat="server" text="Button" onclick="Button1_Click">

 </asp:button></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 ответ

div - не очень хорошее место для хранения значений в веб-форме.

Если структура получает значение для editdiv.InnerHtml из любого места, это, вероятно, из состояния представления. По крайней мере, это, конечно, не из клиентского HTML. Это связано с тем, что, когда страница отправляется обратно на сервер, она все равно, независимо от того, что WebForms пытается заставить вас думать, это обычная почта в формате HTML. Это означает, что его значения исходят из элементов form и только из элементов form. Содержимое HTML-страницы не отправляется на сервер. Состояние просмотра - это потому, что строка с кодировкой base-64, заполненная в input type="hidden" на странице.

Что вы можете сделать, так это создать свой собственный скрытый ввод:

Затем в вашем клиентском коде вы будете обновлять значение возвращаемого input type="hidden" при изменении содержимого этого div. Затем это значение будет отправлено обратно на сервер и может быть доступно:

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

Я не совсем уверен, как обновить скрытый элемент ввода при изменении div, так как я не знаком с TinyMCE. (Хотя я полагаю, что это можно было бы сделать вручную за пределами этого инструмента, ответив на событие в DOM.) Но в конечном итоге то, что вам нужно будет делать, поскольку только значения элемента элемента, а не содержимого DOM, сервер.

licensed under cc by-sa 3.0 with attribution.