【发布时间】:2014-02-07 13:36:46
【问题描述】:
我正在尝试编写自己的验证属性,但我无法从继承的类中获取属性的值。这是我的代码:
protected override ValidationResult IsValid(object value, ValidationContext context)
{
if (context.ObjectType.BaseType == typeof(AddressModel))
{
PropertyInfo property = context.ObjectType.BaseType.GetProperty(_propertyName);
// this is the line i'm having trouble with:
bool isRequired = (bool)property.GetValue(context.ObjectType.BaseType);
return base.IsValid(value, context);
}
return ValidationResult.Success;
}
我不知道我要传递到 GetValue 的意思是什么,因为它需要一个对象,但是我传递的所有内容都给了我一个属性类型与目标不匹配异常
我必须转到基类型,因为我试图从继承的类中获取属性的值,而 context.ObjectInstance 不包含必要的属性
【问题讨论】:
-
我不知道验证框架是如何工作的,所以我无能为力,但
GetProperty期待您正在调用其属性的对象的实例。 -
@Vache 有什么办法可以得到它,因为
context.ObjectInstance返回当前对象,但没有从基本模型类继承的任何属性 -
context.ObjectInstace只是一个Object,您不能将它转换为AddressModel(或您正在使用的任何类型)并使用对象本身吗?正如我所说,我从未使用过该框架,但我会尝试... -
为什么
context.ObjectInstance不能访问它所继承的对象的属性?他们是私人的吗?如果是这样,您将无法获取它们的值,因为这些属性根本不适用于您的物化派生对象。 -
@Vache,刚刚尝试将其转换为基本模型并且它可以工作 - 即使对象实例没有显示任何所需的属性,当它被转换时它们都会显示出来!如果你想回答这个问题,我会给你赏金。谢谢!
标签: c# validation asp.net-mvc-4 c#-4.0