2016-07-09 2 views
1

Невозможно войти в пользовательский валидатор, который я построил на форме Sitecore 8 MVC для формы маркетологов.
Sitecore 8.0 (сборка 3) MVC WFFM Пользовательский валидатор не работает

Вот мои шаги, которые я использовал для создания валидаторов:

1) Я создал C# приложение (.NET 4.5), и построить библиотеку DLL для валидаций файлов. Построен, скопирован .DLL в каталог Bin. Работает хорошо на сайте Sitecore 6.6, у нас есть сайт sitecore 8.0, который он не работает.

Вот код проверки (я модифицировал для установки args.IsValid для false для тестирования).

namespace SitecoreUtilities.UploadFile 
{ 
    public class RestrictSize : FormCustomValidator 
    { 
     public int MaxFileSize 
     { 
      get 
      { 
       int maxSize; 
       if (int.TryParse(base.classAttributes["MaxFileSize"], out maxSize)) 
       { 
        return maxSize; 
       } 
       return 0; 
      } 
      set 
      { 
       base.classAttributes["MaxFileSize"] = value.ToString(); 
      } 
     } 

     public RestrictSize() 
     { 
      this.ServerValidate += this.OnSizeValidate; 
     } 

     private void OnSizeValidate(object source, ServerValidateEventArgs args) 
     { 
      FileUpload fileUpload = FindControl(ControlToValidate) as FileUpload; 
      if (!fileUpload.HasFile) 
      { 
       args.IsValid=true; 
       return; 
      } 
      args.IsValid = fileUpload.PostedFile.ContentLength <= MaxFileSize; 
      args.IsValid = false; // TESTING to confirm getting in here 
     } 
    } 
} 

2) создан новый валидатор (ы):
Адрес: Sitecore/система/Модули/Web Forms для сбытовиков/Настройки/Validation/FileUpload/AllowedFileSize

  • сборки: SitecoreUtilities
  • Класс: SitecoreUtilities.UploadFile.RestrictSize
  • MVC Тип: пусто
  • Validator Дисплей: Динамический
  • Enable Client Script: проверено
  • Параметры: пусто, как я ставлю на фактический элемент
  • Локализованные Параметры: пустой
  • Внутренний контроль : проверено

3) Добавлен валидатор для типов полей/Простые типы/File Upload Пункт

enter image description here

4) Добавлена ​​загрузка файлов в поле формы:

enter image description here

5) Сохранен, опубликованные .. не может работать на сайте.

BTW, я установил сайт local.test.org в IIS 7.5 на своей машине и зашел в проект в визуальной студии и подключился к W3Wp, но не попал в приложение.

Если я пропустил шаг по развертыванию, проконсультируйтесь.

Update 1: Добавлен MVC в название
Update 2: Добавлены C# код за разницы коды между моим кодом и https://doc.sitecore.net/web_forms_for_marketers/working_with_actions_and_validations/validations/walkthrough_create_and_assign_a_custom_fieldtype_validator.

+0

Является ли ваша форма формой MVC или нет? – Gatogordo

+0

Если ваш код работает в версии v6, скорее всего, он не будет работать в v8, поскольку некоторые вещи изменились между этими версиями в wffm ... Можете ли вы проверить https://doc.sitecore.net/web_forms_for_marketers/working_with_actions_and_validations/validations/walkthrough_create_and_assign_a_custom_fieldtype_validator и посмотреть, он соответствует вашему коду и настройке? – Gatogordo

+0

Thx Gatogordo для ответа. 1) да MVC (я обновил тему). если запрос, когда я оставил это поле пустым в валидаторе, я просто смоделировал его после других валидаторов, поскольку он пуст. 2) Спасибо за отправку этой ссылки. Я только что внес некоторые корректировки в код, даже заставил args.IsValid к false, все еще не нажав править. – DanO

ответ

2

Для форм WFFM MVC вам необходимо работать с атрибутами проверки. Я написал сообщение в блоге с примером here. Используемый пример также предназначен для загрузки файлов, поэтому он должен быть релевантным. Это сводится к созданию атрибута, унаследованного от DynamicValidationBase.Вам также нужно создать новое поле, просто чтобы добавить атрибуты - вам не нужно писать там новый код.

Код в блоге принадлежит Sitecore 8.1. Могут быть небольшие различия с 8.0.

+0

Thx Gatogordo, это похоже на решение будет работать на 8.1, но я не вижу Sitecore.Forms.Mvc.ViewModels.Fields в файле Sitecore.Forms.Mvc 8.0.0 .dll. Когда я смотрю @ журналы в Sitecore, я вижу это сообщение: Сообщение: Не удалось загрузить тип 'Sitecore.Forms.Mvc.ViewModels.Fields.FileUploadField' из сборки 'Sitecore.Forms.Mvc, Version = 8.0.0.0, Culture = neutral , PublicKeyToken = null '. – DanO

+0

В 8.0 они находятся в 'Sitecore.Forms.Mvc.Models.Fields' – Gatogordo

+0

Любая идея, в каком пространстве имен находится IViewModel. Тип типа или имя пространства имен« IViewModel »не найден (вам не хватает директивы использования или сборки ссылка?) .. Кроме того, если вы знаете лучший способ найти это, пожалуйста, поделитесь. – DanO

Смежные вопросы