1

由于HtmlEditorExtender没有报价系统,因此我编写了自己的报价系统。还是它有?HtmlEditorExtender除去预标签

asp.net 4.5和ASP.NET AJAX Control Toolkit的16.1.0.0

2016年我们仍然没有白名单功能?

对于引用,我使用的是预标签。但是,最新的HtmlEditorExtender版本16.1.0将pre标签划掉。它只是删除包含预标签的部分。

我的意思是像

<pre><pre>CeFurkan: Wrote</pre>dsfsdfs</pre> 

这是张贴到服务器之前在客户端中删除。我怎样才能让这个标签?

我也试图与跨度类= “MyClass的”,并去除了类标签此时

我的设置

代码背后

htmlEditorExtender1.EnableSanitization = true; 

前码

<ajaxToolkit:HtmlEditorExtender ID="htmlEditorExtender1" TargetControlID="txtMessageBody" 
        runat="server" DisplaySourceTab="True"> 
        <Toolbar> 
         <ajaxToolkit:Undo /> 
         <ajaxToolkit:Redo /> 
         <ajaxToolkit:Bold /> 
         <ajaxToolkit:Italic /> 
         <ajaxToolkit:Underline /> 
         <ajaxToolkit:StrikeThrough /> 
         <ajaxToolkit:Subscript /> 
         <ajaxToolkit:Superscript /> 
         <ajaxToolkit:JustifyLeft /> 
         <ajaxToolkit:JustifyCenter /> 
         <ajaxToolkit:JustifyRight /> 
         <ajaxToolkit:JustifyFull /> 
         <ajaxToolkit:InsertOrderedList /> 
         <ajaxToolkit:InsertUnorderedList /> 
         <ajaxToolkit:CreateLink /> 
         <ajaxToolkit:UnLink /> 
         <ajaxToolkit:RemoveFormat /> 
         <ajaxToolkit:SelectAll /> 
         <ajaxToolkit:UnSelect /> 
         <ajaxToolkit:Delete /> 
         <ajaxToolkit:Cut /> 
         <ajaxToolkit:Copy /> 
         <ajaxToolkit:Paste /> 
         <ajaxToolkit:BackgroundColorSelector /> 
         <ajaxToolkit:ForeColorSelector /> 
         <ajaxToolkit:FontNameSelector /> 
         <ajaxToolkit:FontSizeSelector /> 
         <ajaxToolkit:Indent /> 
         <ajaxToolkit:Outdent /> 
         <ajaxToolkit:InsertHorizontalRule /> 
         <ajaxToolkit:HorizontalSeparator /> 
        </Toolbar> 
       </ajaxToolkit:HtmlEditorExtender> 

和web配置

<ajaxControlToolkit useStaticResources="true" renderStyleLinks="false" htmlSanitizer="AjaxControlToolkit.HtmlEditor.Sanitizer.DefaultHtmlSanitizer, AjaxControlToolkit.HtmlEditor.Sanitizer" /> 

完整的错误它给当尤里的答案试图

Value cannot be null. 
Parameter name: type 
Stack: 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
    at System.Activator.CreateInstance(Type type) 
    at AjaxControlToolkit.HtmlEditorExtender.CreateSanitizer() 
    at System.Lazy`1.CreateValue() 
    at System.Lazy`1.LazyInitValue() 
    at System.Lazy`1.get_Value() 
    at AjaxControlToolkit.HtmlEditorExtender.get_Sanitizer() 
    at AjaxControlToolkit.HtmlEditorExtender.OnInit(EventArgs e) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Control.InitRecursive(Control namingContainer) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

类实现

enter image description here

回答

1

在我看来,最简单的方法是创建自己的实现IHtmlSanitizer的继承DefaultHtmlSanitizer并覆盖GetSafeHtmlFragment方法如下

public class MyHtmlSanitizer : DefaultHtmlSanitizer, IHtmlSanitizer 
{ 
    private static readonly string[] whiteListTags = (ConfigurationManager.AppSettings["whiteListTags"] ?? "").Split(','); 

    string IHtmlSanitizer.GetSafeHtmlFragment(string htmlFragment, Dictionary<string, string[]> whiteList) 
    { 
     foreach (var tag in whiteListTags) 
     { 
      if (!whiteList.ContainsKey(tag)) 
       whiteList.Add(tag, new string[0]); 
     } 

     return base.GetSafeHtmlFragment(htmlFragment, whiteList); 

    } 
} 

然后加入到web.config中的appSettings部分设置自己的标签白名单:

<appSettings> 
    <add key="whiteListTags" value="pre"/> 
</appSettings> 

并配置工具来使用此清洁剂,而不是默认:

<ajaxControlToolkit 
    useStaticResources="true" 
    renderStyleLinks="false" 
    htmlSanitizer="AjaxControlToolkit.Customization.MyHtmlSanitizer, AjaxControlToolkit.Customization" 
    tempFolder="~/Temp"/> 
+0

TY非常多的答案但它给错误:(​​在System.Activator.CreateInstance(类型类型,布尔nonPublic) at System.Activator.CreateInstance(Type type) at AjaxControlToolkit.HtmlEditorExtender.CreateSanitizer() at System.Lazy'1.CreateValue () 在System.Lazy'1.LazyInitValue() 在System.Lazy'1.get_Value() 在AjaxControlToolkit.HtmlEditorExtender.get_Sanitizer(在ajaxControlToolkit.htmlSanitizer – MonsterMMORPG

+0

@MonsterMMORPG修复类型名称根据定制sanotozer的类型名称你的项目 –

+0

Yuriy我没有任何定制杀菌剂。我已经实现了默认的一个。我也跟着你的回答。正如您所说的那样添加了一个新类,然后修改了web配置,如您所说 – MonsterMMORPG