具体来说,它检查属性是否附加了一个UppercaseAttribute;如果是这种情况,那么它将执行不同的逻辑路径.如果可以从ValIDationAttribute中获取ModelMetadata,我将使用以下代码来检查它:
ModelMetadata.ContainerType .GetProperty(VIEwData.ModelMetadata.Propertyname) .GetCustomAttributes(typeof(UppercaseAttribute),true)
首先,是否可以从自定义ValIDationAttribute中检索ModelMetadata.
其次,上面的代码是检查属性是否附加了特定属性的最佳实践.
解决方法 这是你可以做的:protected overrIDe ValIDationResult IsValID(object value,ValIDationContext valIDationContext){ var model = valIDationContext.ObjectInstance; var displayname = valIDationContext.displayname; var propertyname = model.GetType().GetPropertIEs() .Where(p => p.GetCustomAttributes(false).OfType<displayAttribute>().Any(a => a.name == displayname)) .Select(p => p.name).FirstOrDefault(); if (propertyname == null) propertyname = displayname; var property = model.GetType().GetProperty(propertyname); var uppercaseAttribute = property.GetCustomAttributes(typeof(UppercaseAttribute),false).SingleOrDefault() as UppercaseAttribute; if (uppercaseAttribute != null) { // some code... } // return valIDation result...}
出于某种原因,valIDationContext.Membername始终为null,因此您必须根据其显示名称获取属性名称.
总结以上是内存溢出为你收集整理的c# – 从验证属性中检索模型元数据全部内容,希望文章能够帮你解决c# – 从验证属性中检索模型元数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)