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

问题描述 投票:0回答:1

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

编写代码的地方是用户控件(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;
    }
}

String NoteEncoded = OrderNoteTextBox.Text;这里我只得到第一行。

为什么?我怎样才能解决这个问题?谢谢!

c# asp.net textarea richtextbox aspx-user-control
1个回答
0
投票

我必须认为问题在于消毒。

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

<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} ");

    }

输出:

因此,不清楚您对“解码”的期望是什么,但如上所示,不需要解码。生成的文本将是带有“div”等的标记,这通常意味着即使是简单的换行符也会包含“<" and other characters - often restricted ones for a simple line break.

注意我上面如何使用 EnableSanitization="False" 进行测试。

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

© www.soinside.com 2019 - 2024. All rights reserved.