2012-02-03 49 views
0

我有一個類結構,看起來像這樣此驗證dillemma:如何hanlde在DataAnnotations

class Person 
{ 
public virtual string FirstName {get;set;} 
public virtual string LastName {get;set;} 
public virtual Address HomeAddress {get;set;} 
} 

class Address 
{ 
public virtual string Street {get;set;} 
public virtual string City {get;set;} 
public virtual string State {get;set;} 
public virtual string ZipCode {get;set;} 
public virtual string Country {get;set;} 
} 

然後我有需要的地址和使用該RequiredAddress一個人一個人的想法......所以我有我新「必選」的地址看起來像:

class RequiredAddress 
: Address 
{ 
[Required] 
public override string Street {...} 
[Required] 
public override string City {...} 
[Required] 
public override string State {...} 
[Required] 
public override string ZipCode {...} 
[Required] 
public override string Country {...} 
} 

但是當我剛newed了RequiredAddress的一個實例到我RequiredPerson地址的地址字段,MVC似乎無法檢測[必填]標籤,我最終不得不這樣做:

class PersonRequiredAddress 
    : Person 
{ 
public new RequiredAddress Address {get;set;} 
} 

現在,因爲我們必須這樣做,我們不得不重新做我們的DAL來處理對象的差異...這對我來說感覺像一個悲慘的代碼味道。任何人都可以爲我們面對的這個窘境提供更好的解決方案嗎?

回答

1

你能否改變Personclass Person<TAddress> where TAddress : Address?然後class PersonRequiredAdderss : Person<RequiredAddresss>

+0

我可以,但在這種情況下,「Person」被用作具體類,以及「PersonRequiredAddress」......讓我看看它是如何工作的。 – 2012-02-03 16:56:58

+0

是的..是的,我認爲這將起作用。呃..應該已經意識到這一點。 thx @ cadrell0 – 2012-02-03 17:05:33

+0

我離開這個作爲答案,但我碰到的問題是在對象的映射。我似乎無法返回通用的IList >,因爲PersonRequiredAddress似乎不想適合IList – 2012-02-03 18:21:14