Validation Sitecore富文本验证

Validation Sitecore富文本验证,validation,sitecore,rich-text-editor,Validation,Sitecore,Rich Text Editor,验证RTE字段是否包含任何内容的最佳方法是什么? 我尝试添加表达式^\s*$.+已添加到验证中,但它不起作用。这是因为RTE添加了一些html标记,除非作者切换到html视图,否则无法看到这些标记,并且字段的值实际上不是空的。富文本字段可能有各种空标记,例如,默认情况下,Sitecore将用空的p标记替换换行符。请参见Web.config中的HtmlEditor.LineBreak设置: <!-- HTML EDITOR LINE BREAK Specifies th

验证RTE字段是否包含任何内容的最佳方法是什么?
我尝试添加表达式^\s*$.+已添加到验证中,但它不起作用。这是因为RTE添加了一些html标记,除非作者切换到html视图,否则无法看到这些标记,并且字段的值实际上不是空的。

富文本字段可能有各种空标记,例如,默认情况下,Sitecore将用空的p标记替换换行符。请参见Web.config中的HtmlEditor.LineBreak设置:

  <!--  HTML EDITOR LINE BREAK
        Specifies the tag that the HTML editor inserts on Enter. Values can be
        "br", "div" and "p".
  -->
  <setting name="HtmlEditor.LineBreak" value="p" />
如果没有返回任何内容,则不会向页面呈现该值,从而消除可能的空p标记

第二种方法是创建自定义验证规则。要完成此操作,您需要创建一个字段规则、自定义验证器类并将验证规则与任何富文本字段相关联。以下是步骤:

打开内容编辑器并导航到sitecore/System/Settings/ValidationRules/Field Rules/Text,然后添加名为No Content For Rich Text的验证规则

填写标题、说明和类型

在Validators文件夹下的Web项目下创建RichTextValidator类

RichTextValidator.cs

在“数据模板”字段中,添加验证规则

最后,当只有空标记或


富文本字段可以有多种空标记,例如,默认情况下,Sitecore将用空的p标记替换换行符。请参见Web.config中的HtmlEditor.LineBreak设置:

  <!--  HTML EDITOR LINE BREAK
        Specifies the tag that the HTML editor inserts on Enter. Values can be
        "br", "div" and "p".
  -->
  <setting name="HtmlEditor.LineBreak" value="p" />
如果没有返回任何内容,则不会向页面呈现该值,从而消除可能的空p标记

第二种方法是创建自定义验证规则。要完成此操作,您需要创建一个字段规则、自定义验证器类并将验证规则与任何富文本字段相关联。以下是步骤:

打开内容编辑器并导航到sitecore/System/Settings/ValidationRules/Field Rules/Text,然后添加名为No Content For Rich Text的验证规则

填写标题、说明和类型

在Validators文件夹下的Web项目下创建RichTextValidator类

RichTextValidator.cs

在“数据模板”字段中,添加验证规则

最后,当只有空标记或


回答得很好。我将实现第二种方法。如果问题仅仅在于标签,我可能会选择第一个标签,但不幸的是,添加了其他标签。我认为内容作者可能会对错误感到困惑,但我需要添加一些帮助文本…非常好。然而,文本的这种情况又如何呢?我认为这个附加检查会有帮助:var valDecode=WebUtility.HtmlDecodeval.Trim;如果string.IsNullOrWhiteSpacevalDecode返回false;回答得很好。我将实现第二种方法。如果问题仅仅在于标签,我可能会选择第一个标签,但不幸的是,添加了其他标签。我认为内容作者可能会对错误感到困惑,但我需要添加一些帮助文本…非常好。然而,文本的这种情况又如何呢?我认为这个附加检查会有帮助:var valDecode=WebUtility.HtmlDecodeval.Trim;如果string.IsNullOrWhiteSpacevalDecode返回false;
using HtmlAgilityPack;
using Sitecore.Data.Validators;
using System;
using System.Linq;
using System.Runtime.Serialization;

namespace MyProject.Web.Validators
{
    [Serializable]
    public class RichTextValidator : StandardValidator
    {
        public RichTextValidator() { }

        public RichTextValidator(SerializationInfo info, StreamingContext context) : base(info, context)
        { }

        private bool HasContent(string val)
        {
            var htmlVal = new HtmlDocument();
            htmlVal.LoadHtml(val);
            if (htmlVal.DocumentNode == null || !htmlVal.DocumentNode.ChildNodes.Any())
                return false;

            return htmlVal.DocumentNode.ChildNodes.Any(x => !string.IsNullOrWhiteSpace(x.InnerText) && x.InnerText != "&nbsp;");
        }

        protected override ValidatorResult Evaluate()
        {
            string contextText = this.ControlValidationValue;
            if (!HasContent(contextText))
                return ValidatorResult.CriticalError;

            return ValidatorResult.Valid;
        }

        protected override ValidatorResult GetMaxValidatorResult()
        {
            return GetFailedResult(ValidatorResult.CriticalError);
        }

        public override string Name
        {
            get { return "Rich text contains no content."; }
        }
    }
}