在自定义验证属性中获取值?
Get value inside custom validation attribute?
DI 创建了两个自定义验证属性。完成日期验证后,我想进行时间验证,但为此我需要 MyDate。如何从时间验证内部到达 MyDate?
我的模型:
[DateValidation()]
public DateTime MyDate { get; set;}
[TimeValidation()]
public TimeSpan MyTime { get; set;}
我的时间验证:
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
}
}
如果您检查 MSDN,它表示 IsValid
方法:
Determines whether the specified value of the object is valid.
而且,关于 IsValid
的 value
参数,它说:
value Type: System.Object The value of the object to validate.
因此,您所谓的日期是 value
,您只需将其向下转换为 DateTime
:
DateTime MyTime = (DateTime)value;
更新
Thats not really what I was looking for. I know how to do the
validation with value. But in the vague example I gave you value is
MyTime. But I also need MyDate inside the validation of MyTime. (I
intentionally left out the validation of MyDate since it is working)
你不能那样做。归根结底,您正在实现一个属性,而属性是一种类型元数据详细信息。换句话说:他们不知道他们所应用的对象。
你需要的是 IsValid(object, ValidationContext)
重载,ValidationContext
会给你要验证的对象 ObjectInstance
属性.
因此,您可以使用反射访问另一个 属性:
DateTime MyDate = (DateTime)validationContext.ObjectInstance.GetType()
.GetProperty("MyDate", BindingFlags.Public | BindingFlags.Instance)
.GetValue(validationContext.ObjectInstance);
我还要向 TimeValidation
属性添加一个名为 relatedPropertyName
的参数,以免对相关的 属性 名称进行硬编码。
DI 创建了两个自定义验证属性。完成日期验证后,我想进行时间验证,但为此我需要 MyDate。如何从时间验证内部到达 MyDate?
我的模型:
[DateValidation()]
public DateTime MyDate { get; set;}
[TimeValidation()]
public TimeSpan MyTime { get; set;}
我的时间验证:
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
}
}
如果您检查 MSDN,它表示 IsValid
方法:
Determines whether the specified value of the object is valid.
而且,关于 IsValid
的 value
参数,它说:
value Type: System.Object The value of the object to validate.
因此,您所谓的日期是 value
,您只需将其向下转换为 DateTime
:
DateTime MyTime = (DateTime)value;
更新
Thats not really what I was looking for. I know how to do the validation with value. But in the vague example I gave you value is MyTime. But I also need MyDate inside the validation of MyTime. (I intentionally left out the validation of MyDate since it is working)
你不能那样做。归根结底,您正在实现一个属性,而属性是一种类型元数据详细信息。换句话说:他们不知道他们所应用的对象。
你需要的是 IsValid(object, ValidationContext)
重载,ValidationContext
会给你要验证的对象 ObjectInstance
属性.
因此,您可以使用反射访问另一个 属性:
DateTime MyDate = (DateTime)validationContext.ObjectInstance.GetType()
.GetProperty("MyDate", BindingFlags.Public | BindingFlags.Instance)
.GetValue(validationContext.ObjectInstance);
我还要向 TimeValidation
属性添加一个名为 relatedPropertyName
的参数,以免对相关的 属性 名称进行硬编码。