HtmlEditorExtender удаляет предварительный тег

Я кодировал свою собственную систему котировок, так как HtmlEditorExtender не имеет системы котировок. Или это имеет?

asp.net 4.5 и ASP.NET AJAX Control Toolkit 16.1.0.0

В 2016 году у нас до сих пор нет белого списка?

Для цитаты я использую предварительно тег. Тем не менее, последний HtmlEditorExtender в версии 16.1.0 удаляет предварительный тег. Он просто удаляет часть, которая содержит предварительный тег.

Я имею в виду как

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

Это удаляется на стороне клиента перед отправкой на сервер. Как я могу разрешить этот тег?

Я также попытался с span class="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>

И веб-конфиг

<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)

реализация класса

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

    }
}

Затем добавьте в раздел appSettings настройки web.config для белого списка собственных тегов:

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

И настройте инструментарий для использования этого дезинфицирующего средства вместо значения по умолчанию:

<ajaxControlToolkit
  useStaticResources="true"
  renderStyleLinks="false"
  htmlSanitizer="AjaxControlToolkit.Customization.MyHtmlSanitizer, AjaxControlToolkit.Customization"
  tempFolder="~/Temp"/>
Другие вопросы по тегам