MVCのカスタム検証を使用して別のフィールドに基づいてフィールドを検証していますが、この実装に出くわしました。
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")]
たが、同じエラーが発生します。