3

だから私は次のオブジェクトを持っています

public class Person : IValidatableObject 
{

[Required]
public string Name {get;set;}
[Required]
public string Status {get;set;
public Address Address {get;set;}
 public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
        {

            if (Status != "Addressless" && Address == null)
            {
                yield return new ValidationResult("An address is required if this person is not addressless");
            }
        }
}

public class Address 
{
[Required]
public string Address1 {get;set;}
[Required]
public string City {get;set;}
}

さて、私の問題は、その人が住所を持っている場合、EFコードファーストは住所テーブルのDBの値をnullにする必要がないため、住所の値が必要なことです。Personは住所を必要としないため、これが問題を引き起こしているようです。したがって、「Addressless」の場合、Address検証は行われないはずですが、Addressには必須フィールドがあるため、検証は開始されます。

これを回避する方法はありますか?

4

2 に答える 2

1

問題は、Required属性が継承されることです。したがって、Address必須ではありませんが、ビューにバインドするときは、アドレスの個々のプロパティが必要です。

最善の策はAddress、属性を持たないビューモデルを作成し、いくつかの検証ロジックを別のクラスに配置するか、ドメインロジックを検証するコントローラーに配置することです。を使用して検証データを追加できますModelState.AddModelError.

于 2012-11-12T17:15:51.453 に答える