2016-03-21 8 views
1

Я создал пользовательский валидатор в 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(); 

Это никогда не возвращает значения из Редактора контента. Он возвращает элемент непосредственно из базы данных, что мне не помогает.

+0

вы пытались что-то вроде этого http://blog.building-blocks.com/technical-tips/creating-a-custom-sitecore -Поле-валидатор в двадцать минут? –

+0

где вы назначили валидатор? к полю или к шаблону? –

+0

@SitecoreClimber Я пробовал оба. Для шаблона я назначил его стандартным значениям шаблона. – Deane

ответ

0

В моей валидатор (тип поля валидатор) Я использовал

var field = this.GetField(); 

, чтобы получить новое значение поля для проверки. То же самое должно работать для проверки поля. Это, вероятно, немного отличается для проверки достоверности элементов, но я никогда не писал элемент проверки достоверности.

Это также метод BaseValidator и возвращает значение типа Field. Вы можете назначить это непосредственно типу целевого поля, которое вы хотите, например. HtmlField (Sitecore реализовал операторы литья, так что вы можете сделать это):

HtmlField htmlField = field;