如何停止在回发HtmlEditorExtender编码的HTML?(How do I stop Ht

2019-06-25 08:54发布

我有一个包含一个文本框,一个用户控件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(); 
    } 
} 

Answer 1:

要响应这个问题似乎是一个不错的解决方法。 当你的文本了编辑器,使用HtmlDecode将其转换:

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

我会继续和张贴此对您的CodePlex情况下也。 (我想这是你的。)



Answer 2:

我的HTML扩展的理解是,HTML标签基于工具栏上使用的工具添加。 你有没有试着用装载tb.text:

“这是一个测试”

相对于

“<p>这是一个测试</ P>”

至于为什么是这样增加了一倍你,如果延长的每次更新添加标签,然后就好像他们就应当保持与被每次迭代增加。

......把周围的标记文本框中的“P”标签



Answer 3:

无论如何,我竟然有机会来测试这一点,您的问题重现。 看起来好像把你的主页的代码是在“加载”事件进入“初始化”事件只是正常工作。



Answer 4:

我能解决这个问题是这样的:

        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


文章来源: How do I stop HtmlEditorExtender encoding html in postback?