首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HtmlEditorExtender条纹显示预标签

HtmlEditorExtender条纹显示预标签
EN

Stack Overflow用户
提问于 2016-06-09 01:39:56
回答 1查看 709关注 0票数 1

我已经编码了我自己的报价系统,因为HtmlEditorExtender没有报价系统。或者它有?

asp.net 4.5和ASP.NET AJAX控制工具包16.1.0.0

2016年的还没有白名单吗?

作为引用,我使用的是预标签。但是,16.1.0版本中的最新HtmlEditorExtender去掉了预标记。它只是删除了包含预标记的部分。

我是说就像

代码语言:javascript
复制
<pre><pre>CeFurkan: Wrote</pre>dsfsdfs</pre>

这将在客户端删除,然后再提交到服务器。我怎么允许这个标签?

我也尝试过使用span class="myClass“,这次它删除了类标记。

我的设置是

代码背后

代码语言:javascript
复制
htmlEditorExtender1.EnableSanitization = true;

前码

代码语言:javascript
复制
<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配置

代码语言:javascript
复制
<ajaxControlToolkit useStaticResources="true" renderStyleLinks="false" htmlSanitizer="AjaxControlToolkit.HtmlEditor.Sanitizer.DefaultHtmlSanitizer, AjaxControlToolkit.HtmlEditor.Sanitizer" />

尤里的回答所带来的全部错误

代码语言:javascript
复制
    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)

类实现

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-09 10:20:35

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

代码语言:javascript
复制
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设置的web.config部分:

代码语言:javascript
复制
<appSettings>
  <add key="whiteListTags" value="pre"/>
</appSettings>

并将工具包配置为使用此消毒液而不是默认的:

代码语言:javascript
复制
<ajaxControlToolkit
  useStaticResources="true"
  renderStyleLinks="false"
  htmlSanitizer="AjaxControlToolkit.Customization.MyHtmlSanitizer, AjaxControlToolkit.Customization"
  tempFolder="~/Temp"/>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37715579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档