簡體   English   中英

如何在回發中停止HtmlEditorExtender編碼html?

[英]How do I stop HtmlEditorExtender encoding html in postback?

我有一個用戶控件,其中包含一個文本框,一個HtmlEditorExtender和一個按鈕。 使用LoadControl()將用戶控件加載到父頁面中。 每當我點擊按鈕發布表單時,文本框中的任何格式化文本都會被編碼,這不應該發生。


例如,如果我加載文本控件

<p>test</p>

單擊按鈕發布頁面后, .Text屬性返回的文本為

<p>test</p> 

如果我第二次發布,則進一步編碼為:

<p>test</p> 

等等。


如果我在設計時將用戶控件添加到頁面,我確認控件工作正常(不編碼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(); 
    } 
} 

這個問題的回答似乎是一個不錯的解決方法。 當您從編輯器中獲取文本時,使用HtmlDecode進行轉換:

    String fixedText = HttpUtility.HtmlDecode(txtBody.Text);

我會繼續發布你的codeplex案例。 (我認為這是你的。)

我對HTML擴展器的理解是,HTML標簽是根據工具欄上使用的工具添加的。 您是否嘗試使用以下命令加載tb.text:

“這是一個測驗”

而不是

“<p>這是一個測試</ p>”

至於為什么它會像你那樣倍增,如果擴展器在每次更新時添加標簽,那么它們似乎(應該)在每次迭代時都會被添加。

...在標記中的文本框周圍放置“p”標簽

無論如何,我實際上有機會測試這個,你的問題被重新創建。 看起來好像將“加載”事件中的主頁代碼放入“Init”事件中就可以了。

我能夠像這樣解決這個問題:

        Literal lit = new Literal();
        lit.Mode = LiteralMode.PassThrough;
        lit.Text = HttpUtility.HtmlDecode(HTMLTExt);
        TextBox1.Text = lit.Text; // The text box which HTMLEditorExtender is attached to

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM