繁体   English   中英

在自定义ModelBinder中提取数据注释

[英]Extract Data Annotations in custom ModelBinder

我在实现System.Web.Mvc.IModelBinder的MVC中使用自定义模型绑定程序。

模型绑定器采用通用类型(类),提取每个类属性,并将这些属性以及有关每个属性的其他详细信息存储在List中。 例如,对于每个属性,它都基于登录用户存储访问权限,即每个属性的读取,写入,无。 然后,在我的视图中,我使用这些附加数据来确定是否显示特定属性。

我希望能够检索每个属性的验证数据注释属性,并也存储这些详细信息。 我想将它们存储为html属性,稍后可以在下面的示例中将其注入到用于显示属性的控件中。

<input data-val="true" data-val-length="Address1&#32;must&#32;be&#32;less&#32;than&#32;8!!" data-val-length-max="8" data-val-required="Address&#32;Line&#32;1&#32;is&#32;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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM