HTMLEditorExtender似乎正在剥离我的HTML元素的“class”和“id”属性,即使使用EnableSanitization =“false”。
这是默认行为吗?有解决办法吗?
我正在使用最新版本的AjaxControlToolkit。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server" Width="100%"></asp:TextBox>
<ajaxToolkit:HtmlEditorExtender ID="TextBox1_HtmlEditorExtender" runat="server" EnableSanitization="false"
DisplaySourceTab="true" TargetControlID="TextBox1">
</ajaxToolkit:HtmlEditorExtender>
<asp:Button ID="Button1" runat="server" Text="Button" />
答案 0 :(得分:3)
您需要下载AjaxControlToolkit库的源代码并根据需要稍微调整它们。必须修改两个文件:
HtmlEditorExtenderBehavior.Pre.js
让我们调整此文件中的_encodeHtml
函数:
_encodeHtml = function () {
//Encode html tags
var isIE = Sys.Browser.agent == Sys.Browser.InternetExplorer;
// code below to the next comment below can be removed completely if you
// want to preserve 'width' attribute as well
var elements = this._editableDiv.getElementsByTagName('*');
var element;
for (var i = 0; element = elements[i]; i++) {
/*
try {
element.className = '';
element.removeAttribute('class');
} catch (ex) { }
try {
element.id = '';
element.removeAttribute('id');
} catch (ex) { } */
try {
element.removeAttribute('width');
} catch (ex) { }
if (isIE) {
}
}
// end of part of code that may be removed
var html = this._editableDiv.innerHTML;
if (isIE) {
//force attributes to be double quoted
var allTags = /\<[^\>]+\>/g;
html = html.replace(allTags, function (tag) {
var sQA = '';
var nQA = '';
if (tag.toLowerCase().substring(0, 2) != '<a') {
sQA = /\=\'([^\'])*\'/g; //single quoted attributes
nQA = /\=([^\"][^\s\/\>]*)/g; //non double quoted attributes
return tag.replace(sQA, '="$1"').replace(nQA, '="$1"');
}
else {
return tag;
}
});
}
//convert rgb colors to hex
var fixRGB = this._rgbToHex;
var replaceRGB = function () {
html = html.replace(/(\<[^\>]+)(rgb\s?\(\d{1,3}\s?\,\s?\d{1,3}\s?\,\s?\d{1,3}\s?\))([^\>]*\>)/gi, function (text, p1, p2, p3) {
return (p1 || '') + ((p2 && fixRGB(p2)) || '') + (p3 || '');
});
};
//twice in case a tag has more than one rgb color in it;
replaceRGB();
replaceRGB();
// remove empty class and id attributes
html = html.replace(/\sclass\=\"\"/gi, '').replace(/\sid\=\"\"/gi, '');
//converter to convert different tags into Html5 standard tags
html = html.replace(/\<(\/?)strong\>/gi, '<$1b>').replace(/\<(\/?)em\>/gi, '<$1i>');
//encode for safe transport
html = html.replace(/&/ig, '&').replace(/\xA0/ig, ' ');
html = html.replace(/</ig, '<').replace(/>/ig, '>').replace(/\'/ig, ''').replace(/\"/ig, '"');
return html;
}
请注意上面注释的代码块。
HtmlEditorExtender.cs
这是服务器控制代码文件,您需要稍微更改Decode
方法:
public string Decode(string value)
{
EnsureButtons();
string tags = "font|div|span|br|strong|em|strike|sub|sup|center|blockquote|hr|ol|ul|li|br|s|p|b|i|u|img";
string attributes = "style|size|color|face|align|dir|src";
string attributeCharacters = "\\'\\,\\w\\-#\\s\\:\\;\\?\\&\\.\\-\\=";
将 id 和 class 属性添加到attributes
变量:
string attributes = "style|size|color|face|align|dir|src|class|id";
这就是全部 - 构建项目并在项目中使用ACT库的自定义dll。