Пользовательский атрибут проверки не называется ASP.NET MVC - PullRequest
4 голосов
/ 27 августа 2010

Привет всем, у меня есть пользовательский атрибут проверки и назначьте его для проверки на уровне класса. К сожалению, это не называется. Я стараюсь всеми возможными способами решить проблему. Однако это заняло у меня несколько часов, и я не могу найти атрибут, который не вызывается механизмом проверки

Для иллюстрации приведу следующий код.

Атрибут

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
    public sealed class BooleanDependencyAttribute : ValidationAttribute
    {
        private const string _defaultErrorMessage = "กรุณากรอก{0}";
        private readonly object _typeId = new object();

        public string DependencyPropertyName { get; private set; }
        public string DependentPropertyName { get; private set; }

        public BooleanDependencyAttribute(string dependencyPropertyName, string dependentPropertyName)
            : base(_defaultErrorMessage)
        {
            DependencyPropertyName = dependencyPropertyName;
            DependentPropertyName = dependentPropertyName;
        }



        public override object TypeId
        {
            get
            {
                return _typeId;
            }
        }

        public override string FormatErrorMessage(string name)
        {
            return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString,name);
        }

        public override bool IsValid(object value)
        {
            PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(value);
            bool dependencyValue = (bool) properties.Find(DependencyPropertyName, true /* ignoreCase */).GetValue(value);
            object dependentValue = properties.Find(DependentPropertyName, true /* ignoreCase */).GetValue(value);
            if (dependencyValue)
            {
                return true;
            }
            else
            {
                if (dependentValue == null)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }

        }
    }

ViewModel

  [BooleanDependency("ReleaseNow","ReleaseDate",ErrorMessage="Please enter release date")]
    public class ContentCreate
    {

        public string Title { get; set; }

        public DateTime? ReleaseDate { get; set; }


        public string Details { get; set; }

        public string Abstract { get; set; }

        public string Tags { get; set; }

        public bool ReleaseNow { get; set; }

    } 

Пожалуйста, не могли бы вы помочь мне решить эту проблему.

1 Ответ

5 голосов
/ 28 августа 2010

Я нашел решение.Фактически проверка на уровне класса вызывается после того, как все проверки на уровне свойств являются действительными.Поэтому мне нужно заполнить другое обязательное свойство, после чего будет вызван BooleanDependencyAttribute и допустимое значение.

Спасибо за просмотр, отредактируйте заголовок и тег.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...