Я создал пользовательский валидатор в Sitecore. Он выполняется правильно, и я могу отлаживать его и проходить через него.Почему мой пользовательский валидатор Sitecore не читает этот элемент, поскольку он был отредактирован в Редакторе содержимого?
Я продлил мой валидатор с StandardValidator
, который, в свою очередь, простирается от BaseValidator
.
В моем валидаторе, я получаю деталь:
var item = GetItem();
GetItem
является методом от BaseValidator
. Основываясь на моем чтении, это стандартный метод получения элемента для проверки.
Проблема: Элемент, который я возвращаю, не отражает значения, которые были отредактированы в Редакторе содержимого. Вместо этого он просто выглядит как элемент из базы данных (так, как он выглядел, когда он сначала загружался в Редактор контента, не отражая никаких изменений, которые могли бы быть внесены в него).
Таким образом, я не могу подтвердить. Чтобы проверить данные, которые редактор мог изменить в Редакторе содержимого, мне нужно увидеть эти изменения. Видеть, как элемент находится в базе данных прямо сейчас, мне не помогает.
Я сделал несколько расширенной отладки, которые могут или не могут быть полезны -
Я декомпилированный ядро и прошел через обе StandardValidator
и BaseValidator
.
Метод GetItem
от BaseValidator
делает то, что, как я подозреваю, получает элемент из базы данных. Но затем он запускает его с помощью метода под названием UpdateItem
, который, как представляется, предназначен для наложения введенных значений из редактора содержимого поверх сохраненных значений (таким образом, возвращающий объект, который точно отражает данные, которые в настоящее время находятся в редакторе). Это явно то, что я хочу.
Однако, UpdateItem
только кажется, что накладывается что-либо, если свойство, называемое ControlToValidate
, имеет значение ... и оно никогда не делает. Я пробовал этот валидатор как средство проверки поля и средство проверки элементов. Я инициировал его как с сохранением элемента, так и с помощью табуляции с поля. Я поставил точку останова в Visual Studio и часы на ControlToValidate
. Одно время (необъяснимо) оно имело значение FIELD165901047
(которое соответствовало идентификатору поля в редакторе содержимого), но во всех остальных случаях это было null
.
Что это означает, что UpdateItem
эффективно ничего не делает, а элемент просто возвращается, как он в настоящее время находится в базе данных, которая не помогает - я пытаюсь валидатор значения, введенные в редакторе содержимого перед тем экономии к базе данных.
Независимо от моего исследования (я думаю, я понимаю UpdateItem
, но я признаю, что я мог бы быть misinterpeting, и я без учета возможных ошибок декомпиляции), я до сих пор есть эта основная проблема:
var item = GetItem();
Это никогда не возвращает значения из Редактора контента. Он возвращает элемент непосредственно из базы данных, что мне не помогает.
вы пытались что-то вроде этого http://blog.building-blocks.com/technical-tips/creating-a-custom-sitecore -Поле-валидатор в двадцать минут? –
где вы назначили валидатор? к полю или к шаблону? –
@SitecoreClimber Я пробовал оба. Для шаблона я назначил его стандартным значениям шаблона. – Deane