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