Validation Sitecore富文本验证
验证RTE字段是否包含任何内容的最佳方法是什么?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
我尝试添加表达式^\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 != " ");
}
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."; }
}
}
}