自定义验证属性不称为ASP.NET MVC

时间:2010-08-27 16:39:25

标签: c# asp.net-mvc asp.net-mvc-2

大家好我已创建自定义验证属性并将其分配给类级别验证。不幸的是,它没有被调用。我尝试各种方式,认为它可以解决问题。但是,它花了我几个小时,我发现验证机制没有调用该属性。

为了说明你,我把以下代码。

属性

[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;
                }
            }

        }
    }

视图模型

  [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 个答案:

答案 0 :(得分:5)

我找到了解决方案。实际上,在所有属性级验证有效之后调用类级别的验证。因此我需要完成其他必需的属性,然后将调用BooleanDependencyAttribute和有效值。

感谢您查看,编辑标题和标记。