0

我目前正在使用 Ajax 工具;HTMLEditorExtender 在 C# ASP.NET 项目中将文本框转换为 WYSIWYG 编辑器。在初始页面加载时,我将大量格式化文本和表格放入编辑器中,看起来不错;甚至桌子。

数据被加载到 asp:panel 中,面板中的项目/显示是实际加载到扩展器中并显示的内容。

但是,如果我想要一个按钮,将编辑器中的所有数据保存到会话中,并且在按下按钮后仍然在页面回发的 WYSIWG 编辑器中显示所有内容,那么在文本框中加载的所有内容都很好,除了桌子。他们提出了标签。有没有办法解决?

我用来初始加载页面的代码是这样的:

ContentPlaceHolder cphMain = (ContentPlaceHolder)this.Master.FindControl("MainContent");
Panel pnlContent = (Panel)cphMain.FindControl("innerFrame");
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnlContent.RenderControl(hw);
txtPN.Text = sb.ToString();
pnlContent.Visible = false;

在按钮上单击我保存了这个:

string strHTMLText = txtPN.Text;
Session["ProgressNoteHTML"] = strHTMLText;

我正在像这样在回发中加载它:

txtPN.Text = (string)Session["ProgressNoteHTML"];
ContentPlaceHolder cphMain = (ContentPlaceHolder)this.Master.FindControl("MainContent");
Panel pnlContent = (Panel)cphMain.FindControl("innerFrame");
pnlContent.Visible = false;

关于为什么任何回发会使标签出现并且在原始页面加载中它们不会出现的任何想法?

4

2 回答 2

2

Erik 提供的解决方案不适用于包含属性值的表格标签。例如:<table align="right">不会被解码。我还发现<img>标签也是由 编码的HTMLEditorExtender

更简单的解决方案是使用该Server.HTMLDecode()方法。

TextBox_Editor.Text = Server.HtmlDecode(TextBox_Editor.Text) 'fixes encoding bug in ajax:HTMLEditor
于 2012-10-26T02:39:06.847 回答
0

我有同样的问题,它似乎与扩展对 HTML 内容执行的默认清理有关。我还没有找到关闭它的方法,但解决方法很简单。编写一个 Anti-Sanitizing 函数,用适当的标签替换已清理的标签。下面是我用 VB.Net 编写的。AC# 版本看起来非常相似:

 Protected Function FixTableTags(ByVal input As String) As String
    'find all the matching cleansed tags and replace them with correct tags.
    Dim output As String = input

    'replace Cleansed table tags.
    output = output.Replace("&lt;table&gt;", "<table>")
    output = output.Replace("&lt;/table&gt;", "</table>")
    output = output.Replace("&lt;tbody&gt;", "<tbody>")
    output = output.Replace("&lt;/tbody&gt;", "</tbody>")
    output = output.Replace("&lt;tr&gt;", "<tr>")
    output = output.Replace("&lt;td&gt;", "<td>")
    output = output.Replace("&lt;/td&gt;", "</td>")
    output = output.Replace("&lt;/tr&gt;", "</tr>")

    Return output
End Function
于 2012-04-02T21:41:57.340 回答