ValidationErrors пользовательского атрибута ValidationAttribute не отображается должным образом

У меня есть созданный мной атрибут ValidationAttribute, который используется совместно сервером и клиентом. Чтобы атрибут проверки корректно генерировался для клиента при ссылке в вспомогательном классе данных, я должен был быть очень конкретным в том, как я его построил.

Проблема, с которой я столкнулся, заключается в том, что по какой-то причине, когда я возвращаю ValidationResult из своего пользовательского класса атрибутов проверки, он не обрабатывается так же, как другие атрибуты проверки в пользовательском интерфейсе клиента. Вместо отображения ошибки ничего не делает. Однако он правильно проверит объект, но он просто не отобразит неудачный результат проверки.

Ниже приведен код одного из моих настраиваемых классов проверки.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace Project.Web.DataLayer.ValidationAttributes
{
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
    public class DisallowedChars : ValidationAttribute
    {
        public string DisallowedCharacters
        {
            get
            {
                return new string(this.disallowedCharacters);
            }

            set
            {
                this.disallowedCharacters = (!this.CaseSensitive ?     value.ToLower().ToCharArray() : value.ToCharArray());
            }
        }

        private char[] disallowedCharacters = null;

        private bool caseSensitive;

        public bool CaseSensitive
        {
            get
            {
                return this.caseSensitive;
            }

            set
            {
                this.caseSensitive = value;
            }
        }

        protected override ValidationResult IsValid(object value, ValidationContext    validationContext)
        {
            if (value != null && this.disallowedCharacters.Count() > 0)
            {
                string Value = value.ToString();

                foreach(char val in this.disallowedCharacters)
                {
                    if ((!this.CaseSensitive && Value.ToLower().Contains(val)) ||     Value.Contains(val))
                    {
                        return new ValidationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.", val.ToString()));
                    }
                }
            }

            return ValidationResult.Success;
        }
    }
}

Вот как я использую его над своими Свойствами как на сервере, так и на клиенте.

[DisallowedChars(DisallowedCharacters = "=")]

И я пробовал несколько разных способов настройки привязки.

{Binding Value, NotifyOnValidationError=True}

Как и

{Binding Value, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}

Ни один из них, похоже, не заставляет формы, к которым они привязаны, слишком проверять записи. Я пробовал использовать этот атрибут для значений, которые привязаны к TextBoxes, XamGrids, и ни один из них не проверяется должным образом.

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

Мы будем очень признательны за любые мысли.

5
задан Benji Vesterby 22 November 2011 в 21:43
поделиться