如何停止在回发HtmlEditorExtender编码的HTML? [英] How do I stop HtmlEditorExtender encoding html in postback?
问题描述
我有一个包含一个文本框,一个 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
<p>test</p>
after I click on the button to post the page, the text returned by the .Text
property is
&lt;p&gt;test&lt;/p&gt;
If I post a second time, it is further encoded as:
&amp;lt;p&amp;gt;test&amp;lt;/p&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屋!