提问人:Alex 提问时间:9/25/2023 更新时间:9/26/2023 访问量:34
Asp.net ajaxToolkit:HtmlEditorExtender 富文本编辑器不会发送整条消息
Asp.net ajaxToolkit:HtmlEditorExtender rich text editor won't send the whole message
问:
我有一个 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;"> </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;在这里,我只得到第一行。
为什么?我该如何解决这个问题?谢谢!
答:
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} ");
}
输出:
因此,目前尚不清楚您对“解码”的期望,但如上所示,解码不是必需的。生成的文本将被标记,带有“divs”等,这通常意味着即使是简单的换行符也会包括“<”和其他字符 - 通常是简单换行符的限制字符。
请注意我是如何在上面使用 EnableSanitization=“False” 进行测试的。
我想这取决于应用程序的类型,如果用户是必须登录该站点的有效客户,那么您可能会冒着在不进行清理的情况下运行 html 编辑器的风险。但是,如果该网站允许自行注册,或者该页面是公开的,不需要登录用户,那么如果没有清理,您当然无法运行该页面。
评论
0赞
Alex
9/26/2023
EnableSanitization=“False” 效果很好。谢谢!
评论