Как мне остановить HtmlEditorExtender кодирования HTML в обратной передаче?
У меня есть пользовательский элемент управления, который содержит текстовое поле,HtmlEditorExtender
и кнопка. Пользовательский элемент управления загружается на родительскую страницу с помощьюLoadControl()
, Всякий раз, когда я нажимаю на кнопку, чтобы опубликовать форму, любой форматированный текст в текстовом поле кодируется, что не должно происходить.
Например, если я загружаю текстовый элемент управления с
<p>test</p>
после того, как я нажму на кнопку, чтобы опубликовать страницу, текст, возвращенный.Text
свойство
&lt;p&gt;test&lt;/p&gt;
Если я публикую второй раз, он будет закодирован как:
&amp;lt;p&amp;gt;test&amp;lt;/p&amp;gt;
и так далее.
Я подтвердил, что элемент управления работает нормально (не кодирует HTML), если я добавляю пользовательский элемент управления во время разработки на страницу. Эта проблема возникает только если я используюLoadControl()
загрузить его.
Я потратил несколько дней, пытаясь решить эту проблему, но я просто не могу сказать, делаю ли я что-то не так, элемент управления просто несовместим с этим сценарием или существует надежный обходной путь.
Вот простой пример:
Пользовательский контроль:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestDynamicRichTextControl.ascx.cs" Inherits="Sample.forms.TestDynamicRichTextControl" %>
<asp:TextBox ID="txtBody" runat="server" Columns="80" Rows="15" TextMode="MultiLine"></asp:TextBox>
<ajaxToolkit:HtmlEditorExtender ID="heeBody" runat="server" TargetControlID="txtBody">
<Toolbar>
<ajaxToolkit:Bold />
<ajaxToolkit:Italic />
<ajaxToolkit:Underline />
</Toolbar>
</ajaxToolkit:HtmlEditorExtender>
<br />
<asp:Button ID="btnTestPartialPostback" runat="server" Text="Test Partial Postback" onclick="btnTestPartialPostback_Click" />
<asp:Label ID="lblResult" runat="server"></asp:Label>
Код контроля пользователя (BaseUserControl
продолжаетсяSystem.Web.UI.UserControl
и заявляетInitialize()
):
public partial class TestDynamicRichTextControl : BaseUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
public override void Initialize()
{
txtBody.Text = "<p>test</p>";
}
protected void btnTestPartialPostback_Click(object sender, EventArgs e)
{
lblResult.Text = DateTime.Now.ToString();
}
}
Главная страница содержит этот заполнитель:
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
Код главной страницы:
public partial class TestDynamicControl : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
PlaceHolder1.Controls.Clear();
BaseUserControl formUc = (BaseUserControl)this.LoadControl("forms/TestDynamicRichTextControl.ascx");
PlaceHolder1.Controls.Add(formUc);
if (!IsPostBack)
formUc.Initialize();
}
}