18

在我的应用程序中,有几个模型需要Password属性(例如,Registration模型ChangePassword)。该Password属性具有类似DataType和的属性Required。因此,为了确保可重用性和一致性,我创建了:

interface IPasswordContainer{
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    string Password { get; set; }
} 

class RegistrationModel : IPasswordContainer {
    public string Password { get; set; }
}

不幸的是,这些属性不起作用。

然后我尝试将接口更改为一个类:

public class PasswordContainer {
    [Required(ErrorMessage = "Please specify your password")]
    [DataType(DataType.Password)]
    public virtual string Password { get; set; }
}

public class RegistrationModel : PasswordContainer {
    public override string Password { get; set; }
}

现在它正在工作。为什么会这样?

为什么属性从类继承时有效,但从接口继承时无效?

4

1 回答 1

27

接口属性上的属性不会继承到类,您可以将接口设置为抽象类。

从微软找到答案

产品团队不想实现这个功能,主要有两个原因:

  • 与 DataAnnotations.Validator 的一致性
  • 与 ASP.Net MVC 中的验证行为一致
  • 棘手的场景:一个类实现了两个具有相同属性但属性冲突的接口。哪个属性优先?
于 2012-08-24T09:27:14.253 回答