Como faço para parar HtmlEditorExtender codificação HTML no postback?

Eu tenho um controle de usuário que contém uma caixa de texto, umHtmlEditorExtendere um botão. O controle de usuário é carregado em uma página pai usandoLoadControl(). Sempre que clico no botão para postar o formulário, qualquer texto formatado na caixa de texto fica codificado, o que não é o que deveria acontecer.

Por exemplo, se eu carregar o controle de texto com

<p>test</p>

depois que clico no botão para postar a página, o texto retornado pelo.Text propriedade é

<p>test</p> 

Se eu postar uma segunda vez, ele é codificado como:

<p>test</p> 

e assim por diante.

Confirmei que o controle funciona bem (não codifica o HTML) se eu adicionar o controle de usuário em tempo de design à página. Esse problema só acontece se eu usarLoadControl() para carregá-lo.

Eu passei dias tentando resolver esse problema, mas não posso dizer se estou fazendo algo errado, se o controle é simplesmente incompatível com esse cenário ou se há uma solução confiável.

Aqui está um exemplo simples:

Controle do usuário:

<%@ 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> 

Código de controle do usuário (BaseUserControl estendeSystem.Web.UI.UserControl e declaraInitialize()):

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(); 
    } 
} 

A página principal contém este marcador de posição:

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

O código da página principal:

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(); 
    } 
} 

questionAnswers(4)

yourAnswerToTheQuestion