我有一个包含一个文本框,一个用户控件HtmlEditorExtender
,和一个按钮。 用户控制是使用加载到父页面LoadControl()
每当我点击按钮后表单,在文本框中的任何格式的文本被编码,这是不应该发生的事情。
例如,如果我加载与文本控件
<p>test</p>
之后我点击按钮后的页面,在返回的文本.Text
属性
&lt;p&gt;test&lt;/p&gt;
如果我发布了第二次,则进一步编码为:
&amp;lt;p&amp;gt;test&amp;lt;/p&amp;gt;
等等。
我确认,控制正常工作(不编码的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();
}
}