获取自定义验证属性中的值?

时间:2015-07-01 09:26:59

标签: c# validationattribute

DI已创建了两个自定义验证属性。在我完成日期验证后,我想进行时间验证,但要做到这一点,我需要MyDate。如何从时间验证中到达MyDate?

我的模特:

[DateValidation()]
public DateTime MyDate { get; set;}

[TimeValidation()]
public TimeSpan MyTime { get; set;}

我的TimeValidation:

public class TimeValidation: ValidationAttribute
{
    public override bool IsValid(object value)
    {
        TimeSpan time = (TimeSpan)value;
        DateTime MyDate //How can I get this?
        // Do stuff
        // return something good
    }       
}

1 个答案:

答案 0 :(得分:0)

如果您选中MSDN,则会显示IsValid方法:

  

确定对象的指定值是否有效。

并且,关于value的{​​{1}}参数,它说:

  

value类型:System.Object要验证的对象的值。

因此,您所谓的日期为IsValid,您只需将其向下转换为value

DateTime

<击>

更新

  

这不是我真正想要的。我知道怎么做   有价值的验证。但在模糊的例子中,我给你的价值是   我的时间。但我在MyTime的验证中也需要MyDate。 (一世   故意遗漏了MyDate的验证,因为它正在运行)

你做不到。在一天结束时,您正在实现属性,属性是类型元数据详细信息。换句话说:他们无法知道他们应用的对象。

您需要的是IsValid(object, ValidationContext)重载,DateTime MyTime = (DateTime)value; 会为您提供验证ValidationContext属性的对象。

因此,您可以使用反射访问其他属性:

ObjectInstance

我还要为名为DateTime MyDate = (DateTime)validationContext.ObjectInstance.GetType() .GetProperty("MyDate", BindingFlags.Public | BindingFlags.Instance) .GetValue(validationContext.ObjectInstance); 的{​​{1}}属性添加一个参数,以便不对相关属性名称进行硬编码。