我有几个这样的模型类:
public class MyModelBase
{
public string Name { get; set; }
}
public class MyModel : MyModelBase
{
public string SomeOtherProperty { get; set; }
}
MyModel如何将[Required]属性添加到Name属性?
答案 0 :(得分:38)
将父类中的属性声明为virtual:
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
或者你可以使用MetadataType来处理验证(只要你在谈论DataAnnotations ......否则你会被上面的例子所困扰):
class MyModelMetadata
{
[Required]
public string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase
{
public string SomeOtherProperty { get; set; }
}
答案 1 :(得分:34)
尝试使用元数据类。它是一个单独的类,使用允许您间接向模型类添加数据注释的属性进行引用。
e.g。
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase {
... /* the current model code */
}
internal class MyModelMetadata {
[Required]
public string Name { get; set; }
}
答案 2 :(得分:14)
我注意到这些答案实际上都没有正确地调用基本Name属性。覆盖应该写如下所示,以便您没有新属性的单独值。
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get { return base.Name; } set { base.Name = value; }
public string SomeOtherProperty { get; set; }
}
答案 3 :(得分:0)
您可以通过“new”关键字重载基本属性。
public class MyModelBase
{
public string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public new string Name {get; set;}
public string SomeOtherProperty { get; set; }
}