Asp.net ajaxToolkit:HtmlEditorExtender 富文本编辑器不会发送整条消息

Asp.net ajaxToolkit:HtmlEditorExtender rich text editor won't send the whole message

提问人:Alex 提问时间:9/25/2023 更新时间:9/26/2023 访问量:34

问:

我有一个 asp.net 项目,我想做的是使文本区域成为富文本编辑器,为此我使用了ajaxToolkit:HtmlEditorExtender。问题是,当我在文本区域中输入一些文本并将其提交到代码隐藏中时,我只能获得单词,直到我按下回车键。例如:在按回车键之前,我有“这是第一行”,按回车键后有“这是第二行”。在后面的代码中,我只得到“这是第一行”。

编写代码的位置是用户控件(ascx 页),而不是 aspx 页。

这是我定义文本框和 HtmlEditorExtender 的地方:

<asp:Panel runat="server" ID="OrderNotePanel" CssClass="tableContainerWithScrollbar">
 <asp:UpdatePanel ID="UpdatePanel2" runat="server">
     <ContentTemplate>
         <div class="row alignedCenter">
             <div class="col-sm-10 col-xs-12">
                 <label>NOTE:</label>

                 <asp:TextBox ID="OrderNoteTextBox" runat="server"  TextMode="MultiLine" Rows="10" CssClass="form-control" Height="200px" />
                 <ajaxToolkit:HtmlEditorExtender ID="HtmlEditorExtender1"  DisplaySourceTab="True" TargetControlID="OrderNoteTextBox" runat="server">
                     <Toolbar>
                         <ajaxToolkit:Bold />
                         <ajaxToolkit:Italic />
                         <ajaxToolkit:Underline />
                         <ajaxToolkit:InsertUnorderedList />
                     </Toolbar>
                 </ajaxToolkit:HtmlEditorExtender>
             </div>
             <div class="col-sm-2">
                 <label style="display: block;">&nbsp;</label>
                 <asp:Button ID="AddButton" runat="server" Text="ADD" OnClick="InsertButton_Click" CssClass="genericButton small" />
                 <asp:HiddenField runat="server" ID="HiddenFieldTextbox" />
             </div>
         </div>

//Other lines of code

        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>

在单击“添加”按钮时的代码隐藏中,我有:

protected void InsertButton_Click(object sender, EventArgs e)
{
    try
    {
        String NoteEncoded = OrderNoteTextBox.Text;
        var Note = HttpUtility.HtmlDecode(NoteEncoded);
        if (Note != "")
        {
            OrderNotesDataSource.InsertParameters["OrderID"].DefaultValue = CustomerOrderID;
            OrderNotesDataSource.InsertParameters["OrderDetailID"].DefaultValue = OrderLineID;
            OrderNotesDataSource.InsertParameters["OrderNote"].DefaultValue = Note;
            OrderNotesDataSource.InsertParameters["Step"].DefaultValue = Step;
            OrderNotesDataSource.InsertParameters["UserID"].DefaultValue = Page.User.Identity.Name;
            OrderNotesDataSource.Insert();
        }
        OrderNoteTextBox.Text = "";

        OrderNoteListView.DataBind();

    }
    catch (Exception ex)
    {
        OrderLineNotesLabel.Text = ex.Message;
    }
}

字符串 NoteEncoded = OrderNoteTextBox.Text;在这里,我只得到第一行。

为什么?我该如何解决这个问题?谢谢!

C# asp.net TextArea RichTextBox aspx-user-control

评论


答:

1赞 Albert D. Kallal 9/26/2023 #1

我不得不认为问题在于消毒。

尝试对扩展器设置执行此操作(禁用测试清理)。

<ajaxToolkit:HtmlEditorExtender
    ID="HtmlEditorExtender1"
    DisplaySourceTab="True"
    TargetControlID="OrderNoteTextBox"
    runat="server"
    EnableSanitization="False">
    <Toolbar>
        <ajaxToolkit:Bold />
        <ajaxToolkit:Italic />
        <ajaxToolkit:Underline />
        <ajaxToolkit:InsertUnorderedList />
    </Toolbar>
</ajaxToolkit:HtmlEditorExtender>

测试的代码是这样的:

    protected void AddButton_Click(object sender, EventArgs e)
    {

        string NoteEncoded = OrderNoteTextBox.Text;
        Debug.Print($@"From text box = {OrderNoteTextBox.Text}");            
        string Note = HttpUtility.HtmlDecode(NoteEncoded);
        Debug.Print($@"After decode = {Note} ");

    }

输出:

enter image description here

因此,目前尚不清楚您对“解码”的期望,但如上所示,解码不是必需的。生成的文本将被标记,带有“divs”等,这通常意味着即使是简单的换行符也会包括“<”和其他字符 - 通常是简单换行符的限制字符。

请注意我是如何在上面使用 EnableSanitization=“False” 进行测试的。

我想这取决于应用程序的类型,如果用户是必须登录该站点的有效客户,那么您可能会冒着在不进行清理的情况下运行 html 编辑器的风险。但是,如果该网站允许自行注册,或者该页面是公开的,不需要登录用户,那么如果没有清理,您当然无法运行该页面。

评论

0赞 Alex 9/26/2023
EnableSanitization=“False” 效果很好。谢谢!