【问题标题】:How to hanlde this validation dillemma in DataAnnotations如何在 DataAnnotations 中处理这种验证困境
【发布时间】:2012-02-03 22:08:00
【问题描述】:

我有一个如下所示的类结构:

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;}
}

然后,我想到了一个拥有所需地址的人和一个使用所需地址的人......所以我的新“所需”地址看起来像:

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 {...}
}

但是当我刚刚在我的RequiredPerson 地址的Address 字段中新建了一个RequiredAddress 实例时,MVC 似乎无法检测到[Required] 标签,我不得不这样做:

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

现在,因为我们必须这样做,所以我们最终不得不重新执行 DAL 来处理对象的差异……这对我来说就像是一种悲惨的代码味道。谁能为我们面临的这个困境提供更好的解决方案?

【问题讨论】:

    标签: c# oop design-patterns


    【解决方案1】:

    你能把Person改成class Person<TAddress> where TAddress : Address吗?然后class PersonRequiredAdderss : Person<RequiredAddresss>

    【讨论】:

    • 我可以,但在这种情况下,“Person”被用作具体类,以及“PersonRequiredAddress”......让我看看它是如何工作的。
    • 是的..是的..我认为这会奏效。呵呵..应该意识到这一点。谢谢@cadrell0
    • 我将此作为答案,但我遇到的问题是对象的映射。我似乎无法返回通用 IList> 因为 PersonRequiredAddress 似乎不想适合 IList
    • 澄清这一点...我正在尝试获取一个存储库来返回我 1) 一个 Person 或 2) 一个 List> 其中 TAddress 可以是地址 -或 - 必填地址。
    【解决方案2】:

    看看动态附加数据注解

    其他人的问题在这里得到了回答 DataAnnotations dynamically attaching attributes

    【讨论】:

    • 我认为这超出了我需要诚实的范围。
    猜你喜欢
    • 2011-02-17
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多