【发布时间】:2016-07-08 00:07:00
【问题描述】:
我在 Sitecore 中创建了一个自定义验证器。它可以正确执行,我可以对其进行调试和单步调试。
我从StandardValidator 扩展了我的验证器,而它又从BaseValidator 扩展。
在我的验证器中,我得到了这个项目:
var item = GetItem();
GetItem 是来自BaseValidator 的方法。根据我的阅读,这是获得要验证的项目的标准方法。
问题:我返回的项目没有反映在内容编辑器中编辑的值。相反,它似乎只是数据库中的项目(因此,它在内容编辑器中首次加载时的样子,没有反映可能对其进行的任何更改)。
因此,我无法验证。要验证编辑器可能在内容编辑器中更改的数据,我需要能够看到这些更改。现在查看该项目在数据库中的位置对我没有帮助。
我做了一些扩展调试,可能有用也可能没用 --
我反编译了内核,遍历了StandardValidator 和BaseValidator。
来自BaseValidator 的GetItem 方法做了我怀疑的事情——它从数据库中获取项目。但随后它通过一个名为UpdateItem 的方法运行它,该方法似乎旨在将来自内容编辑器的输入值覆盖在存储值之上(从而返回一个准确反映当前位于编辑器中的数据的对象)。这显然是我想要的。
但是,UpdateItem 仅在名为 ControlToValidate 的属性具有值时才会显示覆盖任何内容......但它永远不会覆盖。我已经尝试将此验证器作为字段验证器和项目验证器。我通过保存一个项目和一个字段来启动它。我在 Visual Studio 中设置了一个断点,并在 ControlToValidate 上进行了监视。有一次(莫名其妙地)它的值是 FIELD165901047(对应于内容编辑器中的字段 ID),但在所有其他情况下,它都是 null。
这意味着UpdateItem 实际上什么都不做,并且该项目只是返回,因为它当前位于数据库中,这没有帮助 - 我正在尝试验证在内容编辑器中输入的值 在保存到数据库之前。
不管我的调查如何(我想我理解UpdateItem,但我承认我可能会误解它,并且我没有考虑潜在的反编译错误),我仍然有这个基本问题:
var item = GetItem();
这似乎永远不会从内容编辑器返回值。它直接从数据库返回项目,这对我没有帮助。
【问题讨论】:
-
你在哪里分配了验证器?到字段还是模板?
-
@SitecoreClimber 我都试过了。对于模板,我将其分配给模板的标准值。
-
你解决过这个问题吗?我也面临同样的问题。
-
不。这仍然是一个谜。
标签: validation sitecore custom-validators content-editor