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
}
}
答案 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}}属性添加一个参数,以便不对相关属性名称进行硬编码。