![](/img/trans.png)
[英]How to add DataAnnotations attributes to specific properties in a C# class
[英]How to add attributes to a base class's properties
我有几个 model 类,如下所示:
public class MyModelBase
{
public string Name { get; set; }
}
public class MyModel : MyModelBase
{
public string SomeOtherProperty { get; set; }
}
MyModel 如何向 Name 属性添加 [Required] 属性?
将父 class 中的属性声明为虚拟:
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; }
}
尝试使用元数据 class 。 它是一个单独的 class ,使用允许您将数据注释间接添加到 model 类的属性进行引用。
例如
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase {
... /* the current model code */
}
internal class MyModelMetadata {
[Required]
public string Name { get; set; }
}
ASP.NET MVC(包括核心)通过ModelMetadataTypeAttribute
FromQuery
我注意到这些答案都没有真正正确地调用基本名称属性。 覆盖应该像下面这样写,以便您没有新属性的单独值。
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; }
}
您可以通过“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; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.