Jak zatrzymać kodowanie html HtmlEditorExtender w odsłonie?

Mam formant użytkownika zawierający pole tekstowe, aHtmlEditorExtenderi przycisk. Kontrola użytkownika jest ładowana do strony nadrzędnej za pomocąLoadControl(). Ilekroć klikam przycisk, aby opublikować formularz, każdy sformatowany tekst w polu tekstowym zostaje zakodowany, co nie powinno się zdarzyć.

Na przykład, jeśli załaduję formant tekstu za pomocą

<p>test</p>

po kliknięciu przycisku, aby opublikować stronę, tekst zwrócony przez.Text nieruchomość jest

<p>test</p> 

Jeśli opublikuję po raz drugi, jest on dalej kodowany jako:

<p>test</p> 

i tak dalej.

Potwierdziłem, że formant działa poprawnie (nie koduje HTML), jeśli dodam formant użytkownika w czasie projektowania do strony. Ten problem występuje tylko wtedy, gdy używamLoadControl() aby go załadować.

Spędziłem kilka dni na próbie rozwiązania tego problemu, ale nie mogę stwierdzić, czy robię coś złego, jeśli kontrola jest po prostu niezgodna z tym scenariuszem lub jeśli istnieje niezawodne obejście.

Oto prosty przykład:

Kontrola użytkownika:

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

Kod kontroli użytkownika (BaseUserControl rozciąga sięSystem.Web.UI.UserControl i oświadczaInitialize()):

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

Strona główna zawiera ten symbol zastępczy:

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

Kod strony głównej:

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