代码之家  ›  专栏  ›  技术社区  ›  embarus

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

  •  4
  • embarus  · 技术社区  · 16 年前

    大家好,我已经创建了自定义验证属性并将其分配给类级验证。不幸的是,它没有被调用。我想尽一切办法来解决这个问题。但是,它花了我几个小时,我找不到属性不是由验证机制调用的。

    为了给你演示,我放了下面的代码。

    属性

    [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 回复  |  直到 16 年前
        1
  •  5
  •   embarus    16 年前

    我找到了解决办法。实际上,类级别的验证是在所有属性级别的验证都有效之后调用的。因此,我需要完成其他必需的属性,然后BooleanDependencyAttribute将被调用并返回有效值。

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