Надежная проверка ошибок больше, чем System.NotImplementedException

Я использую надежную проверку в течение нескольких часов

[Required]
[Range(typeof(TimeSpan), "00:00:00", "23:59:59")]
public Nullable<System.TimeSpan> start { get; set; }
[Required]
[GreaterThan("HoraInicio")]
public Nullable<System.TimeSpan> end { get; set; }

он корректно проверяет поля, но когда я вызываю submitchanges в контроллере, он выдает мне ошибку

[NotImplementedException: Не допускается реализация способа.] Foolproof.ModelAwareValidationAttribute..GetValidationResult(Значение объекта, ValidationContext validationContext) +29 System.Data.Entity.Internal.Validation.ValidationAttributeValidator.Validate(EntityValidationContext entityValidationContext, свойство InternalMemberEntry) +198

[DbUnexpectedValidationException: непредвиденное исключение было выдано во время проверки 'end' при вызове Foolproof.GreaterThanAttribute.IsValid. См. Внутреннее исключение для деталей.]

происходит то же самое с датами, что я могу сделать? Есть ли другой способ сделать эту проверку?

1 ответ

Решение

Кажется, что Foolproof не имеет интеграции с EF4 или выше, чтобы исправить это, вы должны загрузить весь проект Foolproof и перегрузить метод "isvalid" в классе ModelAwareValidationAttribute, который они собирают, и ссылаться на dll для вашего проекта.

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var container = validationContext.ObjectInstance;

#region This block of code decompiled from namespace System.ComponentModel.DataAnnotations.ValidationAttribute
ValidationResult local_0 = ValidationResult.Success;
if (!this.IsValid(value, container)) // Change to decompiled code here to call our abstract implementation instead of the NotImplemented IsValid(object value) method above
{
    string[] temp_26;
    if (validationContext.MemberName == null)
        temp_26 = (string[])null;
    else
        temp_26 = new string[1]
            {
                validationContext.MemberName
            };
    string[] local_1 = temp_26;
    local_0 = new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName), (IEnumerable<string>)local_1);
}
return local_0;
#endregion}

http://foolproof.codeplex.com/SourceControl/latest http://forums.asp.net/t/1752975.aspx?Conditional+validation+with+MVC+Foolproof+Validation+

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