我在 Sitecore 中创建了一个自定义验证器。它正确执行,我可以调试它并逐步完成它。
我从 扩展了我的验证器StandardValidator
,而它又从 扩展BaseValidator
。
在我的验证器中,我得到了这个项目:
var item = GetItem();
GetItem
是一种来自 的方法BaseValidator
。根据我的阅读,这是获得要验证的项目的标准方法。
问题:我返回的项目没有反映在 Content Editor 中编辑的值。相反,它似乎只是数据库中的项目(因此,它在内容编辑器中首次加载时的样子,没有反映可能对其进行的任何更改)。
因此,我无法验证。要验证编辑器可能在内容编辑器中更改的数据,我需要能够看到这些更改。现在查看该项目在数据库中的位置对我没有帮助。
我做了一些扩展调试,可能有用也可能没用——
我反编译了内核,并遍历了StandardValidator
和BaseValidator
.
from的GetItem
方法BaseValidator
做了我怀疑的事情——它从数据库中获取项目。但随后它通过一个名为的方法运行它,该方法UpdateItem
似乎旨在将来自内容编辑器的输入值覆盖在存储的值之上(从而返回一个准确反映当前位于编辑器中的数据的对象)。这显然是我想要的。
但是,仅当被调用的属性具有值UpdateItem
时才会覆盖任何内容......而且它永远不会。ControlToValidate
我已经尝试将此验证器作为字段验证器和项目验证器。我通过保存一个项目和一个字段来启动它。我在 Visual Studio 中设置了一个断点并在ControlToValidate
. 有一次(莫名其妙地)它的值是FIELD165901047
(对应于内容编辑器中的字段 ID),但在所有其他情况下,它都是null
.
这意味着UpdateItem
实际上什么都不做,并且该项目只是返回,因为它当前位于数据库中,这无济于事——我试图在保存到数据库之前验证在内容编辑器中输入的值。
不管我的调查如何(我想我理解UpdateItem
,但我承认我可能会误解它,并且我没有考虑潜在的反编译错误),我仍然有这个基本问题:
var item = GetItem();
这似乎永远不会从内容编辑器返回值。它直接从数据库返回项目,这对我没有帮助。