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