我在MVC中使用自定义模型绑定器来实现System.Web.Mvc.IModelBinder。
模型绑定器采用泛型类型(类)提取每个类属性,并将它们存储在List中,并附加有关每个属性的其他详细信息。例如,对于每个Property,它根据登录用户存储每个属性的访问权限,即Read,Write,None。然后在我的视图中,我使用这些附加数据来确定是否显示特定属性。
我希望能够检索每个属性的验证数据注释属性,并存储这些详细信息。我想将它们存储为html属性,我可以将其注入到用于稍后显示属性的控件中,如下例所示。
<input data-val="true" data-val-length="Address1 must be less than 8!!" data-val-length-max="8" data-val-required="Address Line 1 is required." id="Entity_Address_AddressLine1" name="Entity.Address.AddressLine1" type="text" value="aaaa1111" />
我是否必须使用反射从类中提取数据注释属性,还是有另一种方法?如何将数据注释输出为html属性?
答案 0 :(得分:1)
你走了:
foreach (PropertyInfo prop in Model.GetType().GetProperties())
{
var annotations = prop.GetCustomAttributes(typeof(ValidationAttribute), false);
foreach(var annotation in annotations)
{
if(annotation is RequiredAttribute)
{
//...
}
}
}
答案 1 :(得分:0)
为此,我实现了我在MVC中注册和使用的自定义DataAnnotationsModelMetadataProvider(MpMetaDataProvider)。 您在Global.asax的Application_Start事件中注册它
ModelMetadataProviders.Current = new MpMetaDataProvider();
在我的MpMetaDataProvider中,我调用以下方法返回特定类的特定属性的数据注释。我希望这有助于某人。
this.GetMetadataForProperty(modelAccessor, modelProperty.Parent.EntityType, modelProperty.Name);