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 に答える