如何停止在回发HtmlEditorExtender编码的HTML? [英] How do I stop HtmlEditorExtender encoding html in postback?

查看:255
本文介绍了如何停止在回发HtmlEditorExtender编码的HTML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含一个文本框,一个 HtmlEditorExtender ,和一个按钮的用户控件。用户控件使用 LoadControl加载到父页面()。每当我点击按钮后表单,在文本框中输入任何格式的文本获得EN $ C $的CD,这是不应该发生的事情。


例如,如果我加载的文本控件

 &放大器; LT; P&放大器; GT;&测试放大器; LT; / P&放大器; GT;

在我点击按钮后的页面,由。文本属性返回的文本

 &放大器;放大器; LT; P&放大器;放大器; GT;测试与放大器;放大器; LT; / P&放大器;放大器; GT;

如果我发布了第二次,这进一步为en codeD为:

 &放大器;放大器;放大器; LT; P&放大器;放大器;放大器; GT;测试&放大器;放大器;放大器; LT; / P&放大器;放大器;放大器; GT;

等。


我证实,控制工作正常(不带code中的HTML),如果我在设计时添加的用户控件的页面。如果我使用 LoadControl()加载它。

该问题只发生

我花了几天试图解决这个问题,但我不能告诉,如果我做错了什么,如果控制是简单地用此方案不兼容,或者如果有一个可靠的解决办法。


下面是一个简单的例子:

用户控制:

 <%@控制语言=C#AutoEventWireup =真codeBehind =TestDynamicRichTextControl.ascx.cs继承=Sample.forms.TestDynamicRichTextControl%GT ;
< ASP:文本框ID =txtBody=服务器栏=80行=15的TextMode =多行>< / ASP:文本框>
< ajaxToolkit:HtmlEditorExtender ID =heeBody=服务器的TargetControlID =txtBody>
    <&工具栏GT;
        < ajaxToolkit:粗体/>
        < ajaxToolkit:斜体/>
        < ajaxToolkit:下划线/>
    < /工具栏>
< / ajaxToolkit:HtmlEditorExtender>
< BR />
< ASP:按钮的ID =btnTestPartialPostback=服务器文本=测试部分回发的onclick =btnTestPartialPostback_Click/>
< ASP:标签ID =lblResult=服务器>< / ASP:标签>

用户控制code( BaseUserControl 扩展 System.Web.UI.UserControl 并声明初始化()

 公共部分类TestDynamicRichTextControl:BaseUserControl
{
    保护无效的Page_Load(对象发件人,EventArgs的发送)
    {
    }    公共覆盖无效初始化()
    {
        txtBody.Text =&所述p为H.;试验&下; / P>中;
    }    保护无效btnTestPartialPostback_Click(对象发件人,EventArgs的发送)
    {
        lblResult.Text = DateTime.Now.ToString();
    }
}

主页包含此占位符:

 < ASP:占位符ID =PLACEHOLDER1=服务器>< / ASP:占位符>

主页的code:

 公共部分类TestDynamicControl:System.Web.UI.Page
{
    保护无效的Page_Load(对象发件人,EventArgs的发送)
    {
        PlaceHolder1.Controls.Clear();
        BaseUserControl formUc =(BaseUserControl)this.LoadControl(表格/ TestDynamicRichTextControl.ascx);
        PlaceHolder1.Controls.Add(formUc);        如果(!的IsPostBack)
            formUc.Initialize();
    }
}


解决方案

应对<一个href=\"http://stackoverflow.com/questions/10957048/how-to-set-htmleditorextenders-content-server-side\">this问题似乎是一个体面的解决办法。当你的文本退出编辑器,使用 HtmlDe code 将其转换:

 字符串FIXEDTEXT = HttpUtility.HtmlDe code(txtBody.Text);

我会继续前进,这张贴在你的codePLEX案例也。 (我想这是你的。)

I have a user control that contains a text box, an HtmlEditorExtender, and a button. The user control is loaded into a parent page using LoadControl(). Whenever I click on the button to post the form, any formatted text in the text box gets encoded, which is not what should happen.


For example, if I load the text control with

&lt;p&gt;test&lt;/p&gt;

after I click on the button to post the page, the text returned by the .Text property is

&amp;lt;p&amp;gt;test&amp;lt;/p&amp;gt; 

If I post a second time, it is further encoded as:

&amp;amp;lt;p&amp;amp;gt;test&amp;amp;lt;/p&amp;amp;gt; 

and so on.


I confirmed that the control works fine (does not encode the HTML) if I add the user control at design time to the page. This issue only happens if I use LoadControl() to load it.

I have spent days trying to resolve this issue, but I just can't tell if I am doing something wrong, if the control is simply incompatible with this scenario, or if there is a reliable workaround.


Here is a simple example:

User control:

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

User control code (BaseUserControl extends System.Web.UI.UserControl and declares 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(); 
    } 
} 

The main page contains this placeholder:

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

The code of the main page:

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

解决方案

The response to this question seems to be a decent workaround. When you get the text out of the editor, use HtmlDecode to convert it:

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

I'll go ahead and post this on your codeplex case also. (I assume it's yours.)

这篇关于如何停止在回发HtmlEditorExtender编码的HTML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆