我目前正在使用Ajax工具; HTMLEditorExtender将文本框转换为C#ASP.NET项目中的WYSIWYG编辑器。在初始页面加载时,我将大量格式化的文本和表格放入编辑器中,看起来很好;甚至是桌子。
将数据加载到asp:面板中,面板中的项目/显示是实际加载到扩展器中并显示的内容。
但是,如果我想要一个按钮将编辑器中的所有数据保存到会话中,按下按钮后仍然显示页面上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;
关于为什么任何回发会使标签出现以及在原始页面加载中它们没有的任何想法?
答案 0 :(得分:2)
Erik提供的解决方案不适用于包含属性值的表标记。例如:<table align="right">
将不会被解码。我还发现<img>
标签也由HTMLEditorExtender
编码。
更简单的解决方案是使用Server.HTMLDecode()
方法。
TextBox_Editor.Text = Server.HtmlDecode(TextBox_Editor.Text) 'fixes encoding bug in ajax:HTMLEditor
答案 1 :(得分:0)
我遇到了同样的问题,它似乎与扩展程序对HTML内容执行的默认清理有关。我还没有找到关闭它的方法,但解决方法非常简单。 编写一个Anti-Sanitizing函数,用正确的标签替换清理过的标签。下面是我用VB.Net编写的。 C#版本看起来非常相似:
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("<table>", "<table>")
output = output.Replace("</table>", "</table>")
output = output.Replace("<tbody>", "<tbody>")
output = output.Replace("</tbody>", "</tbody>")
output = output.Replace("<tr>", "<tr>")
output = output.Replace("<td>", "<td>")
output = output.Replace("</td>", "</td>")
output = output.Replace("</tr>", "</tr>")
Return output
End Function