requiredif实体框架空场
问题描述:
我验证基于使用自定义的验证在MVC另一个字段的字段,我碰到这个实施传来:requiredif实体框架空场
public class RequiredIfAttribute : ValidationAttribute
{
private String PropertyName { get; set; }
private String ErrorMessage { get; set; }
private Object DesiredValue { get; set; }
public RequiredIfAttribute(String propertyName, Object desiredvalue, String errormessage)
{
this.PropertyName = propertyName;
this.DesiredValue = desiredvalue;
this.ErrorMessage = errormessage;
}
protected override ValidationResult IsValid(object value, ValidationContext context)
{
Object instance = context.ObjectInstance;
Type type = instance.GetType();
Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null);
if (proprtyvalue.ToString() == DesiredValue.ToString())
{
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
}
而且我有一个简单的类定义如下:
public class Person
{
public int PersonID { get; set; }
public string name { set; get; }
[RequiredIf("name","","Address is required")]
public string addr { get; set; }
}
当我运行页面,我得到一个Object reference not set to an instance of an object.
错误,但改变了线[RequiredIf("name","John","Address is required")]
产量预期的结果。我的问题是,你如何使用它来检查该字段是否为空。
我也试图改变行[RequiredIf("name",null,"Address is required")]
,但我得到了同样的错误。
答
这似乎工作:
protected override ValidationResult IsValid(object value, ValidationContext context)
{
if (value != null) { return ValidationResult.Success; }
Object instance = context.ObjectInstance;
Type type = instance.GetType();
Object proprtyvalue = type.GetProperty(PropertyName).GetValue(instance, null);
if (proprtyvalue == null) {
return new ValidationResult(ErrorMessage);
}
return ValidationResult.Success;
}
答
你没有张贴你正在测试的实际实例化的人,所以我只是猜测:确保属性名的proprtyvalue是不是要调用toString()就可以了之前空。所以,你的Person.Name不能空!