Asp.net mvc 4 如何覆盖数据注释
我有一个person类,就这个问题而言,它是Asp.net mvc 4 如何覆盖数据注释,asp.net-mvc-4,Asp.net Mvc 4,我有一个person类,就这个问题而言,它是 public class Person { [Required(ErrorMessage = "***")] [Display(Name = "Your full name")] public string Name { get; set; } } 我继承的这是我的抱怨课 public class Complaints : Person { [Required(ErrorMessage = "***")] [
public class Person
{
[Required(ErrorMessage = "***")]
[Display(Name = "Your full name")]
public string Name { get; set; }
}
我继承的这是我的抱怨课
public class Complaints : Person
{
[Required(ErrorMessage = "***")]
[Display(Name = "Detail of the issue")]
public string Detail{ get; set; }
}
一切正常
问题是,我们现在希望用户不需要填写他们的全名,但我已经将其设置为required
因为我的Person类在其他地方使用,所以我不能更改必需的属性
如何覆盖派生类中的
DataAnnotations
?我在猜测(这也解释了我的困惑),因为DataAnnotation
属于属性,我不能只覆盖DataAnnotation
,而必须覆盖整个属性?您可以使用自定义的DataAnnotationsModelMetadataProvider
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
// fiddle with metadata here
return modelMetadata;
}
}
然而,真正的解决方案是将您的继承分离成一种关系。用“现实世界”的术语来思考问题——比如狗是动物,所以:
dog:animal
狗有主人,所以主人是狗的财产,狗不从主人那里继承。在这种情况下,投诉人应该是财产而不是基本案例,因为投诉人不是个人。您可以使用自定义的数据注释ModelMetadataProvider
public class CustomModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
var modelMetadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
// fiddle with metadata here
return modelMetadata;
}
}
然而,真正的解决方案是将您的继承分离成一种关系。用“现实世界”的术语来思考问题——比如狗是动物,所以:
dog:animal
狗有主人,所以主人是狗的财产,狗不从主人那里继承。在这种情况下,投诉人应该是财产而不是基本案例,因为投诉人不是人。使用new
关键字。将属性添加到投诉
-公共新字符串名称{get;set;}
(不带属性)或更好,请使用视图模型。谢谢。如何在此实例中使用ViewModel?它与属性为@StephenMuecke的类有何不同?视图模型是特定于视图的类。请参阅使用new
关键字。将属性添加到投诉
-公共新字符串名称{get;set;}
(不带属性)或更好,请使用视图模型。谢谢。如何在此实例中使用ViewModel?它与属性为@StephenMuecke的类有何不同?视图模型是特定于视图的类。参考