我在使用反射,DataAnnotations和asp.mvc时遇到了问题。
我已经定义了界面:
public interface IFoo
{
string Name { get; set; }
}
然后我创建实现这些接口的类并添加更多属性:
public class a : IFoo
{
public string Name { get; set; }
[MaxLength(50)]
public string P1 { get; set; }
}
public class b: IFoo
{
public string Name { get; set; }
[Required]
[MaxLength(100)]
public string P2 { get; set; }
}
//应该存储a或b类提取属性的附加类。
public class AdditionalProperty
{
public string Name { get; set }
public string Value { get; set }
}
正如您所看到的,DataAnnotations属性还有一些其他属性。
所以问题是如何使用DataAnnotations元数据创建其他属性的集合?。
我期待以下结果:
对于班级a => ICollection = {{Name =“P1”,Value = null}} //但是Value属性应该具有属性P1的DataAnnotations。
对于班级b => ICollection = {{Name =“P2”,Value = null}} //但是Value属性应该具有属性P2的DataAnnotations。
需要在asp.mvc中创建一个模型,并通过验证,例如:
public class aspMvcModel
{
public ICollection<AdditionalProperty> ListOfProperties { get; set; }
}
然后我可以使用这个模型类在asp.mvc视图上显示表单。
-
我知道如何提取属性列表,我知道如何只选择每个类的唯一属性(简化代码):
var classToScan = new a();
var properties = classToScan.GetType().GetProperties()
但我不知道如何将数据注释从一个类“复制”到AdditionalProperty类的集合。
任何想法?。
答案 0 :(得分:0)
我无法理解您的确切问题是什么,但如果您想获取所有数据注释,则可以使用以下代码。仍然可以提到你确切的问题。
var metaData = ModelMetadataProviders.Current.GetMetadataForType(null, Type.GetType("namespace.a"));
IDictionary<string, object> validationAttributes = helper.GetUnobtrusiveValidationAttributes("P1", metaData);