gpt4 book ai didi

validation - 为什么我的 Sitecore 自定义验证器无法读取已在内容编辑器中编辑的项目?

转载 作者:行者123 更新时间:2023-12-05 06:42:40 26 4
gpt4 key购买 nike

我在 Sitecore 中创建了一个自定义验证器。它执行正确,我可以调试它并单步执行它。

我从 StandardValidator 扩展了我的验证器,后者又从 BaseValidator 扩展。

在我的验证器中,我得到了项目:

var item = GetItem();

GetItemBaseValidator 中的一个方法。根据我的阅读,这是验证项目的标准方法。

问题:我取回的项目不反射(reflect)已在内容编辑器中编辑的值。相反,它似乎只是来自数据库的项目(因此,它在内容编辑器中首次加载时的样子,没有反射(reflect)可能对其进行的任何更改)。

因此,我无法验证。为了验证编辑器可能在内容编辑器中更改的数据,我需要能够看到这些更改。查看项目现在在数据库中的位置对我没有帮助。

我做了一些扩展调试,这可能有帮助也可能没有帮助 --

我反编译了内核,遍历了 StandardValidatorBaseValidator

BaseValidator 中的 GetItem 方法做了我怀疑的事情——它从数据库中获取项目。但随后它通过一个名为 UpdateItem 的方法运行它,该方法似乎旨在将内容编辑器的输入值覆盖在存储值之上(从而返回一个准确反射(reflect)当前位于的数据的对象)编辑)。这显然是我想要的。

但是,UpdateItem 仅在名为 ControlToValidate 的属性有值时才显示为覆盖任何内容……但它从来没有。我已将此验证器同时用作字段验证器和项目验证器。我通过保存一个项目和在一个字段上切换来启动它。我在 Visual Studio 中放置了一个断点,并在 ControlToValidate 上进行了监视。有一次(莫名其妙)它的值为 FIELD165901047(对应于内容编辑器中的字段 ID),但在所有其他情况下,它一直为 null

这意味着 UpdateItem 实际上什么都不做,并且项目只是返回,因为它当前位于数据库中,这没有帮助——我正在尝试验证输入的值内容编辑器保存到数据库之前。

不管我的调查(我想我理解 UpdateItem,但我承认我可能误解了它,而且我没有考虑潜在的反编译错误),我仍然有这个基本问题:

var item = GetItem();

这似乎永远不会从内容编辑器返回值。它直接从数据库返回项目,这对我没有帮助。

最佳答案

在我的验证器(字段类型验证器)中我使用过

 var field = this.GetField();

获取要验证的字段的新值。这同样适用于字段验证器。项目验证器可能有点不同,但我从未编写过项目验证器。

它也是 BaseValidator 的一个方法,返回一个 Field 类型的值。您可以将其直接分配给您想要的目标字段的类型,例如HtmlField(Sitecore 已实现转换运算符,因此您可以执行此操作):

HtmlField htmlField = field;

关于validation - 为什么我的 Sitecore 自定义验证器无法读取已在内容编辑器中编辑的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36131767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com