[英]Extract Data Annotations in custom ModelBinder
我在实现System.Web.Mvc.IModelBinder的MVC中使用自定义模型绑定程序。
模型绑定器采用通用类型(类),提取每个类属性,并将这些属性以及有关每个属性的其他详细信息存储在List中。 例如,对于每个属性,它都基于登录用户存储访问权限,即每个属性的读取,写入,无。 然后,在我的视图中,我使用这些附加数据来确定是否显示特定属性。
我希望能够检索每个属性的验证数据注释属性,并也存储这些详细信息。 我想将它们存储为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属性?
干得好:
foreach (PropertyInfo prop in Model.GetType().GetProperties())
{
var annotations = prop.GetCustomAttributes(typeof(ValidationAttribute), false);
foreach(var annotation in annotations)
{
if(annotation is RequiredAttribute)
{
//...
}
}
}
为此,我实现了一个自定义的DataAnnotationsModelMetadataProvider(MpMetaDataProvider),我在MVC中注册并使用了它。 您在Global.asax的Application_Start事件中注册它
ModelMetadataProviders.Current = new MpMetaDataProvider();
在我的MpMetaDataProvider中,我调用以下方法以返回特定类的特定属性的数据注释。 我希望这可以帮助别人。
this.GetMetadataForProperty(modelAccessor, modelProperty.Parent.EntityType, modelProperty.Name);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.