Поле WFFM MVC не выделяется при сбое проверки CUstom

Мы используем WFFM 2.4 версии 151103, Sitecore 7.2. Создана пользовательская проверка для формы MVC. Когда он возвращает сбойный ValidationResult, поле в форме не выделяется, и сообщение об ошибке не отображается в информационном блоке под полем. Вот код модели:

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Sitecore.Data.Items;
using Sitecore.Forms.Mvc.ViewModels;
using Sitecore.Forms.Mvc.ViewModels.Fields;
using Sitecore.Forms.Mvc.Validators;
using Frb.Atl.Extensions.WFFM.CustomValidators;

namespace Frb.Atl.Extensions.WFFM.Models
{
    public class TourSingleLineTextField : SingleLineTextField
    {
        [AtlantaTourParticipantsAttribute("tourProperty")]
        [DataType(DataType.Text)]
        public override string Value { get; set; }
    }
}

И пользовательский валидатор MVC:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Web.Mvc;
using System.Linq;
using Sitecore.Diagnostics;
using Sitecore.Forms.Mvc.Validators;
using Frb.Atl.Extensions.WFFM.Models;
using Sitecore.Forms.Mvc.Interfaces;
using Sitecore.Forms.Mvc.ViewModels;
using Sitecore.Forms.Mvc.Validators.Rules;
using Sitecore.Forms.Mvc.ViewModels.Fields;

namespace Frb.Atl.Extensions.WFFM.CustomValidators
{
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
    public class AtlantaTourParticipantsAttribute : DynamicValidationBase
    {

        public AtlantaTourParticipantsAttribute(string tourProperty)
        {
            Assert.ArgumentNotNullOrEmpty(tourProperty, "tourProperty");
        this.TourProperty = tourProperty;
        }

        public string TourProperty { get; set; }
        public string Participants { get; set; }
        public int MaxParticipants { get; set; }

        public string ErrorMessage = string.Empty;

        public const int MinParticipants = 10;

        public List<int> m60 = new List<int>(new int[] {12, 11, 10, 9, 5, 4, 3, 2, 1});

        protected override ValidationResult ValidateFieldValue(IViewModel TourSingleLineTextField, object value, ValidationContext validationContext)
        {
            var fieldModel = this.GetModel<TourSingleLineTextField>(validationContext);
            var tourSingleLineTextField = validationContext.ObjectInstance as TourSingleLineTextField;

            var Month = DateTime.Now.ToString("MM");
            int month = 0;
            int participants = 0;

            int.TryParse(Month, out month);
            int.TryParse(fieldModel.Value.ToString(), out participants);

            if (m60.Contains(month))
                MaxParticipants = 60;
            else
                MaxParticipants = 30;

            if (participants >= 10 && participants <= MaxParticipants)
            {
                return ValidationResult.Success;
            }
            else
            {
                ErrorMessage = "Number of participants must be between 10 and " + MaxParticipants.ToString() + ".";
                return new ValidationResult(ErrorMessage);
            }
        }
    }
}

Кто-нибудь еще испытывал такое поведение в WFFM? Любое разрешение, если у вас есть?

ТИА

1 ответ

Причина этой проблемы не в типе настраиваемого поля или коде проверки. Проблема была в том, что отсутствовали файлы конфигурации аналитики. Форма потерпит неудачу еще до того, как доберется до пользовательской проверки. Заменил аналитические файлы, и проверка начала работать правильно.

Другие вопросы по тегам